1

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

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

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

但是当用户使用 Windows 浏览器安装 patch.msp 文件时(基本上是双击该文件)。它安装得很好(没有生成错误,也显示在已安装的更新中)但我的 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 就可以正常安装,没有问题。

4

2 回答 2

2

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

因此,您需要修改新包并添加一个新的自定义操作,该操作会根据属性更改REINSTALL值。PATCH

编辑:您希望您的自定义操作以这种方式工作:

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

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

<CustomAction Id="PatchInstall" Property="REINSTALL" Value="ALL" />
<InstallExecuteSequence>
    <Custom Action="PatchInstall" Before="InstallInitialize">PATCH</Custom>
</InstallExecuteSequence>
于 2012-08-21T08:15:47.950 回答
0

发帖是因为我没有看到列出的这个潜在修复——

如果它具有相同的版本号,命令行指令成功地替换了文件,我有点惊讶。REINSTALLMODE 指令“o---”应该意味着只重新安装较低版本的文件。

无论如何,我认为这个问题也可以通过将 MSI 安装程序的内部设置 REINSTALLMODE 更改为“a---”来解决。'a' REINSTALLMODE 属性表示应重新安装所有文件,无论版本或校验和如何。

于 2021-10-21T12:38:39.923 回答