.NET安装包有时不完全删除以前的版本

时间:2008-11-14 13:02:49

标签: c# .net visual-studio

我使用VS2008安装包分发我的应用程序,这通常很有用。当我创建应用程序的新版本时,我进入并增加安装包上的Version属性并验证RemovePreviousVersions属性是否设置为True。

大部分时间都可以正常运行 - 我只是运行新版本的安装包,卸载旧版本,更新版本替换它。

但是,有时安装包会成功运行,但是当我启动程序时,旧版本会启动。显然旧版本的.exe仍然存在。

我最终不得不完全卸载软件并安装新版本,这个版本总是有效,但很痛苦。

据我所知,文件没有被使用,安装包没有告诉我重启。

关于这里发生了什么的任何想法?

3 个答案:

答案 0 :(得分:4)

不是直接的答案,但升级和卸载+重新安装之间的主要区别在于,任何自定义卸载步骤都不会在2k8中调用,而是在2k5中。

这在Visual Studio 2005 -> 2008/10 Service Installer Project Upgrade issue

中引用

与此相关的另一个区别是,在2k8中,文件会根据版本信息资源进行升级 - 如果您的模块没有更新版本,则不会被替换。

在某些情况下,你的强名是否也有效果,但我非常有信心最后一段涵盖了你所看到的问题。

答案 1 :(得分:3)

第二个是使用orca

Orca是修改msi文件的实用程序。

您可以从以下链接下载“Orca”。 http://www.softpedia.com/get/Authoring-tools/Setup-creators/Orca.shtml

步骤:

 a. Install orca into your computer.
 b. Open orca
 c. Drag and drop your msi into orca UI
 d. Into left panel it will list the name of tables
 e. select property table
 f. go to right panel and right click
 g. click on 'Add Row'
 h. into 'Property' type REINSTALLMODE
 i. into 'Value' type amus
 j. save msi file
 k. and that's it

现在安装时会覆盖所有文件。

答案 2 :(得分:0)

我们需要将msi文件的REINSTALLMODE属性设置为amus。

以下是了解更多有关'amus'http://msdn.microsoft.com/en-us/library/aa371182%28VS.85%29.aspx

含义的链接

有两种方法可以做到。

  1. 使用.NET SDK附带的msiexec.exe(如果你有VS 2005或VS 2008,它会附带它,只需浏览到visual studio的命令提示符,你就会在那里找到它)。
  2. 一旦找到msiexec.exe,只需输入以下命令,将安装程序的REINSTALLMODE属性设置为amus。

    msiexec.exe / i foo.msi REINSTALLMODE = amus