如何检测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安装中包含一个名为justInstalled.txt(或其他)的额外文件。在应用程序启动时检查该文件。如果找到它,请删除它,并为该部署的首次运行运行任何代码。该文件将一直丢失,直到下一次部署/升级。
是isfirstrn在每个程序版本中都被重置…
这是来自Microsoft的例外:
此属性的值被重置每当用户从一个升级到下一个版本。如果你想只执行一个操作第一次任何版本的应用程序运行后,您将需要执行额外的测试,例如正在检查文件是否存在您第一次创建,还是存储
if (ApplicationDeployment.IsNetworkDeployed)
{
ApplicationDeployment deployment = ApplicationDeployment.CurrentDeployment;
if (deployment.IsFirstRun)
{
//Your Code Here....
}
}
参见isfirstrn文档