在尝试了所有建议的解决方案但仍然遇到相同的问题后,我摆弄了一段时间,并将几个解决方案组合成一个真正有效的解决方案。
仅设置“isInstalled”属性的问题是升级后会保留该值,因此每次安装新版本时,它都会再次运行应用程序。但是使用应用程序清单文件和 Mage 只是解决这个小问题的工作量太大而且太复杂。
所以我所做的是获取应用程序运行版本的当前构建号,将其保存到一个属性中,然后每次都根据运行版本检查该属性。这是有效的,因为每次发布都会增加版本号。
1) 在 AssemblyInfo.cs 中更改您的程序集版本以使用通配符:
[assembly: AssemblyVersion("1.0.*")]
2) 如果在构建时引发“确定性”错误,请打开您的 .csproj 文件并在 PropertyGroup 部分中将确定性设置为 false
<Deterministic>false</Deterministic>
3) 添加这个防呆函数来获取正在运行的程序集版本:
private Version GetRunningVersion()
{
try
{
return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
}
catch
{
return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
}
}
4) 在项目的属性中,打开“设置”选项卡,并添加一个名为 lastVersion(字符串、用户)的设置。将值留空。
5) 添加此属性以用于确定这是否是应用程序安装后第一次运行。
private bool isFirstRun
{
get { return Properties.Settings.Default.lastVersion != GetRunningVersion().ToString(); }
}
6) 然后在您的代码中,在您检查 isFirstRun 之后添加此 :
if (isFirstRun)
{
Properties.Settings.Default.lastVersion = GetRunningVersion().ToString();
Properties.Settings.Default.Save();
}