我使用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安装就没问题。
答案 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>