区分卸载/安装和升级应用程序

And*_*rei 7 .net c# deployment installer upgrade

所以,我有这个应用程序,我们正在生产进一步的开发版本.

如果用户卸载了应用程序(例如,使用"添加/删除程序"),那么我希望应用程序删除文件系统中包含应用程序相关信息的某个文件夹.

但是,如果应用程序已升级(通过下载此应用程序的较新安装程序并安装它),那么我希望它保留该文件夹.

我(目前)的印象是,无法区分卸载/安装以及仅将应用程序从一个版本更新到另一个版本,因为.NET部署项目将升级视为另一个卸载/安装过程,但是应该可能以某种方式.

感谢您抽出时间和我可能获得的任何答案.

And*_*rei 0

我最终还找到了一种方法来检查应用程序是否正在升级或者是否是全新安装:

  • 应用程序在注册表中留下一些有关其自身的信息(应用程序名称、版本号等)。这通常存储在

LocalMachine\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{应用程序的 GUID}

卸载应用程序后,该信息将被删除。

  • 但是,您可以在安装应用程序版本时检查该信息(这可以通过在部署项目中添加一些自定义操作来完成)。我在BeforeInstall方法下检查它,并在注册表中查找DisplayVersion值,如下所示:


RegistryKey regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{AppGUIDHere}");
string version = (string)regKey.GetValue("DisplayVersion");

Run Code Online (Sandbox Code Playgroud)
  • 该值将包含您计算机上当前安装的版本。如果此安装的版本小于您尝试安装的应用程序的版本,则您将遵循升级的逻辑路径

  • 如果您在注册表中找不到该注册表项下的任何内容,则意味着这是全新安装(计算机上在此安装之前没有其他应用程序)。在这里,您遵循安装的另一个逻辑路径

希望这对某人有帮助。