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

时间:2011-04-27 23:11:43

标签: c# .net clickonce

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

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

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

但是当用户在安装站点上发布publish.htm并手动安装新版本时,它根本不起作用。有没有办法可靠地检测这些条件的两个

编辑:我正在考虑的情况:有时用户会听到已发布更新并手动转到publish.htm以获取新版本,而不是启动应用程序和让ClickOnce处理升级。对于ClickOnce,这显然与首次安装无法区分。这是真的吗?

解决方案代码:我最终使用以下关键部分创建了一个ClickOnce帮助程序类:

    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();
        }
    }

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

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

这是微软的除外:

  

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

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

答案 2 :(得分:0)

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

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

请参见IsFirstRun Doc