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

时间:2020-03-06 14:59:45  来源:igfitidea点击:

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

也许这篇文章比我更好地解释了它:

My problem boils down to: when the
  user performs an update (i.e. double
  clicks on MyAppVer2.msi when they
  already have MyAppVer1.msi installed)
  the Uninstall method inside my
  Installer is called first, but I have
  no apparent property to check from
  inside this method to detect that an
  update is being performed so that I
  can branch my code appropriately.

解决方案

在这里盲目猜测,但是我将从检查Installer.Context属性中的参数开始。如果这没有帮助,则saveState参数中可能有一些传递给Uninstall的东西。

最后的机会是提示用户,并将子安装程序设置为适当的安装程序。

Visual Studio附带的部署项目在处理最简单方案之外的任何功能时都功能严重不足。

对于情况,我们需要执行以下操作之一:

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

安装项目中有一个设置,默认情况下将"卸载"以前的版本,将此标志设置为OFF,则我们不必担心!

有没有我们不能使用WIX的原因,WIX可以更有效地处理此类问题,请查看"升级"教程,此处