2012-03-23 169 views
1

我有一个用WIX创建的安装程序,它安装了一堆DLL和配置文件。一旦安装完成,显然有时候我想更新JUST DLL文件,并保留原来的配置。WIX覆盖/更新安装程序

我看过NeverOverwrite="yes"选项,看起来很有前途,但是我现在遇到了这个问题。当我尝试在安装完成后重新运行我的安装程序时,出现此错误。

enter image description here

的问题是,我不想用版本号或产品标识混乱。我只想让安装程序重新运行并覆盖必要的DLL文件。这有意义吗?

+2

你不只是重新运行你的安装程序,你重新编译它,然后尝试在安装了以前版本的机器上运行它,更正吗? – BryanJ 2012-03-23 19:09:20

+0

这是100%正确的BryanJ – aherrick 2012-03-23 20:49:55

回答

2

如果您重新编译来更新dll,您应该真的考虑更新安装程序中的版本控制。如果每次编译dll和安装程序时都有构建过程更新构建编号,这应该不成问题。

您收到错误的原因是因为产品ID和版本号匹配,但包装代码不同。要解决此错误,您有以下选项:

  • 更新版本号并将其视为升级。
  • 更改产品ID(和版本)并将其视为升级。
  • 如果您设置了软件包代码,产品ID和版本可以匹配,但是这并不是真正的建议,尤其是在您修改安装程序中的文件时。如果您设置了软件包代码以匹配以前的安装程序,那么您将获得维护对话框,并且如果您进行了修复或修改,我不确定在执行修复时是否会使用缓存的MSI或重新编译的MSI,所以我不确定你可以期待什么结果。
2

与BryanJ说的一样,错误表示您正在安装与以前安装的软件包具有相同产品代码的新软件包。

该解决方案很可能只是将产品Id属性设置为*。当你想要做minor upgrades的能力时,你只需要稳定的产品ID。

较小的升级不允许对功能组件树进行任何重组,并且AFAIK只具有快速安装大型功能的优势。我们只是做所有升级为major upgrades,这是更容易管理。

相关问题