如何使用.NET 2 System.Configuration.Install检测更新?

如何使用.NET 2 System.Configuration.Install检测更新?,.net,visual-studio,installation,.net,Visual Studio,Installation,我为我的安装程序创建了一个从System.Configuration.Install派生的类。 但是,当我尝试更新应用程序时,正在调用Uninstall()中的代码。 如何检测到用户正在尝试更新而不是卸载 也许比我更能解释: 我的问题归结为:当 用户执行更新(即双重更新) 单击MyAppVer2.msi时 已安装MyAppVer1.msi) 在我的 先调用安装程序,但我没有 没有明显的属性可供检查 在该方法中检测 正在执行更新,以便 可以适当地分支我的代码 瞎猜,但我会先检查一下房子,看看有没有

我为我的安装程序创建了一个从System.Configuration.Install派生的类。
但是,当我尝试更新应用程序时,正在调用Uninstall()中的代码。
如何检测到用户正在尝试更新而不是卸载

也许比我更能解释:

我的问题归结为:当 用户执行更新(即双重更新) 单击MyAppVer2.msi时 已安装MyAppVer1.msi) 在我的 先调用安装程序,但我没有 没有明显的属性可供检查 在该方法中检测 正在执行更新,以便 可以适当地分支我的代码


瞎猜,但我会先检查一下房子,看看有没有什么问题。如果没有帮助,则在传递给的savedState参数中可能有某些内容


最后一次机会是,将子安装程序设置为合适的安装程序。

Visual Studio附带的部署项目在处理最简单的场景之外的任何事情时都严重不足

在您的情况下,您需要执行以下操作之一:

  • 找出在卸载原始MSI之前设置标志的方法,您可以在installer类中检查该标志
  • 在installer类中直观地提示用户
  • 重新设计安装/卸载逻辑,使其不依赖于调用卸载程序的情况

  • 您的安装项目中有一个默认设置将“卸载”以前的版本,关闭此标志,您就不必担心了

    你为什么不能使用WIX,因为WIX可以更有效地处理这类事情,请看升级教程,

    关闭该选项,当我查看控制面板->添加/删除程序时,我会看到各种条目。我安装的每个版本都有一个。是的,这就是windows安装程序的崩溃。正如其他海报所提到的,您可能想看看其他解决方案……我只知道该选项是唯一具有默认功能的有效解决方案。谢谢。在Installer.Context或savedState中没有任何帮助。那么我怀疑您只需要提示用户,或者为InstallShield或其他东西买单。有很多人抱怨.NET对MSI的支持太差了,但是没有人打算马上修复它。