繁体   English   中英

如何检测第一次运行 ClickOnce 部署的应用程序?

[英]How do I detect the first time a ClickOnce-deployed application has been run?

我有一个 ClickOnce 部署的应用程序,我目前正在使用它来检测首次运行新部署的时间:

if (ApplicationDeployment.IsNetworkDeployed
    && ApplicationDeployment.CurrentDeployment.IsFirstRun)
{
    // Display release notes so user knows what's new
}

ClickOnce 执行自动更新后,它似乎按预期工作。

但是当用户去安装站点上的 publish.htm 并手动安装更新版本时,它根本不起作用。 有没有办法可靠地检测这两种情况?

编辑:我试图解释的情况:有时用户听到更新已发布并手动 go 到 publish.htm 以获取新版本,而不是启动应用程序并让 ClickOnce 处理升级。 对于 ClickOnce,这显然与首次安装没有区别。 真的吗?

解决方案代码:我最终创建了一个 ClickOnce 助手 class ,其中包含以下关键部分:

    public static bool IsFirstRun
    {
        get
        {
            if (!IsNetworkDeployed)
                return false; // not applicable == bool default value

            if (!File.Exists(VersionFileName))
                return true;

            return (GetLastRunVersion() != Version.ToString());
        }
    }

    public static void StoreCurrentVersion()
    {
        File.WriteAllText(VersionFileName, Version.ToString());
    }

    public static string GetLastRunVersion()
    {
        using (var stream = File.OpenText(VersionFileName))
        {
            return stream.ReadToEnd();
        }
    }

    public static string VersionFileName
    {
        get
        {
            StringBuilder filename = new StringBuilder(Files.LocalFilesPath);
            if (!filename.ToString().EndsWith(@"\"))
                filename.Append(@"\");
            filename.Append(@"versioninfo.dat");
            return filename.ToString();
        }
    }

在 ClickOnce 安装中包含一个名为 justInstalled.txt(或其他内容)的额外文件。 应用程序启动时该文件的 Chedk。 如果您发现它,请将其删除并为您首次运行该部署运行任何代码。 该文件将一直丢失,直到下一次部署/升级。

是的,每个程序版本都会重置 IsFirstRun...

这是微软的例外:

每当用户从一个版本升级到下一个版本时,都会重置此属性的值。 如果您只想在第一次运行任何版本的应用程序时执行操作,则需要执行额外的测试,例如检查您第一次创建的文件是否存在,或使用 Application 存储标志设置。

这或多或少回答了你的问题......

if (ApplicationDeployment.IsNetworkDeployed)
{
    ApplicationDeployment deployment = ApplicationDeployment.CurrentDeployment;

    if (deployment.IsFirstRun)
    {
        //Your Code Here....
    }
} 

请参阅IsFirstRun 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM