WiX:默认情况下如何在REINSTALL = ALL中安装创建的补丁?

时间:2012-08-20 04:41:52

标签: wix wix3.5

我使用wix工具生成了一个patch.msp文件,当我使用以下命令通过命令行安装它时,我的应用程序的所有组件都会更新。

通过命令行安装patch.msp文件完美无缺!

msiexec.exe /p patch.msp /l*vx patch.log /qb REINSTALL=ALL REINSTALLMODE=omusa

但是当用户使用Windows Explore安装patch.msp文件时(基本上双击该文件)。它安装正常(生成NO错误,也显示在已安装的更新中)但我的dll和.exe文件不会更新。

那么如何使用REINSTALL=ALL进行此安装?有没有可以添加到patch.wxs文件的命令?

提前致谢

修改

<CustomAction Id="PatchInstall" Property="PATCH" Value="REINSTALL" />
<InstallExecuteSequence>
  <Custom Action="PatchInstall" Before="InstallInitialize">REINSTALL="ALL"</Custom>
</InstallExecuteSequence>

此更新 - 2012/09/27

建议的方法不起作用,但我的解决方案的问题是文件版本没有改变,因此安装程序显示警告消息,告知文件没有更改。我在安装补丁时在日志中找到了这个:

MSI (s) (48:F4) [17:32:34:025]: File: C:\Muzi_Test_Installer\ACME.dll;  Won't Overwrite;    Won't patch;    Existing file is of an equal version

所以我要更新文件版本并重新运行测试。

最终更新 好的只是为了确认这是一个文件版本问题!只需更新文件版本,MSP安装就没问题。

1 个答案:

答案 0 :(得分:1)

如果正在安装补丁,您可以尝试将REINSTALL属性设置为ALL

因此,您需要修改新软件包并添加新的自定义操作,以PATCH属性为条件更改REINSTALL值。

修改:您希望自定义操作以这种方式运行:

if (PATCH) {
    REINSTALL = "ALL";
}

所以在WiX中,它看起来像:

<CustomAction Id="PatchInstall" Property="REINSTALL" Value="ALL" />
<InstallExecuteSequence>
    <Custom Action="PatchInstall" Before="InstallInitialize">PATCH</Custom>
</InstallExecuteSequence>