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

本文关键字:应用程序 第一次 运行 部署 clickonce 何检测 检测 | 更新日期: 2023-09-27 17:53:14

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

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

在ClickOnce执行自动更新后,它似乎像预期的那样工作。

但是当用户进入安装站点的publish.htm并手动安装新版本时,它根本不起作用。是否有一种方法可以可靠地检测这两个条件?

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

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

    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部署的应用程序第一次运行?

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

是isfirstrn在每个程序版本中都被重置…

这是来自Microsoft的例外:

此属性的值被重置每当用户从一个升级到下一个版本。如果你想只执行一个操作第一次任何版本的应用程序运行后,您将需要执行额外的测试,例如正在检查文件是否存在您第一次创建,还是存储

if (ApplicationDeployment.IsNetworkDeployed)
{
    ApplicationDeployment deployment = ApplicationDeployment.CurrentDeployment;
    if (deployment.IsFirstRun)
    {
        //Your Code Here....
    }
} 

参见isfirstrn文档