[英]How do I detect updates with a manually deployed ClickOnce using mage?
[英]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....
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.