【发布时间】:2017-12-22 12:09:31
【问题描述】:
我们在使用 WIX 设置工具时发现了一些奇怪的行为。 我们已经部署了一些主要版本(2.2.0 - 到 2.2.4)。对于 2.2.5,我们更改了自定义操作中的一些小东西(在我们使用 XCOPY 之前,现在我们使用 RoboCopy,因为它有一个“MOVE”命令而不仅仅是一个副本)。
但是当我们现在从 2.2.4 更新到 2.2.5 时,安装程序仍然使用旧的 Copy 命令而不是新的 MOVE 命令,但这不可能是因为 2.2.5 没有任何 Copy 命令。 如果我部署 2.2.6(与 2.2.5 相同)并从 2.2.5 更新,它将使用新的更新过程...... 看起来更新使用的是旧的 MSI。
有没有办法防止这种行为?这完全破坏了更新过程,因为现有配置文件在更新时未正确复制。
我们不能强制客户通过 GUID 清理注册表或从缓存中删除任何 MSI 文件...
任何帮助表示赞赏。 提前致谢
更新: Product.wxs 中的新自定义操作
<Property Id="C_TEMP" Value="C:\Temp" />
<Property Id="ROBOCOPY_EXE">robocopy.exe</Property>
<CustomAction Id="CopyToTemp" Property="ROBOCOPY_EXE" Return="ignore" ExeCommand='"[INSTALLDIR]\Configuration" "[C_TEMP]\ServerSettings" ServerSettings.json' />
<CustomAction Id="CopyFromTemp" Property="ROBOCOPY_EXE" Return="ignore" ExeCommand='"[C_TEMP]\ServerSettings" "[INSTALLDIR]\Configuration" ServerSettings.json /MOVE /IS' />
旧的自定义操作
<Property Id="C_TEMP" Value="C:\Temp" />
<Property Id="XCOPY_EXE">xcopy.exe</Property>
<CustomAction Id="CopyToTemp" Property="XCOPY_EXE" Return="ignore" ExeCommand='"[INSTALLDIR]\Configuration\ServerSettings.json" "[C_TEMP]\ServerSettings.json.bak*" /YIR' />
<CustomAction Id="CopyFromTemp" Property="XCOPY_EXE" Return="ignore" ExeCommand='"[C_TEMP]\ServerSettings.json.bak" "[INSTALLDIR]\Configuration\ServerSettings.json*" /YIR' />
之后代码至今没有改变
<InstallExecuteSequence>
<Custom Action="CopyToTemp" Before="InstallInitialize">Installed AND (NOT REMOVE="ALL" OR UPGRADINGPRODUCTCODE)</Custom>
<Custom Action="CopyFromTemp" Before="SetVersionsInRegistry">NOT Installed OR Installed AND (NOT REMOVE="ALL" OR UPGRADINGPRODUCTCODE)</Custom>
.....
</InstallExecuteSequence>
【问题讨论】:
-
当您升级 MSI 时会运行旧的安装来卸载它。如果您没有在自定义操作上使用正确的条件创作它,它将在卸载期间运行它。当您安装新的 msi 时,您应该能够使用“/l*v msiLog.txt”更好地了解从旧版本升级到 2.2.5+ 的日志发生了什么。您能否将旧的自定义操作定义和时间表以及新的添加到您原来的问题中?
-
感谢您的解释。我添加了我们更改的自定义操作。但据我了解,设置始终使用已安装版本中的旧自定义操作,而不是新设置。然后我们必须检查是否可以处理此问题..
-
我已经用新信息更新了我的答案。似乎您对这些自定义操作的条件对于您描述的预期行为并不理想,尽管我并不完全了解它们应该如何工作。请参阅下面的详细信息。
-
好的,阅读我之前的更新我发现了一些问题。我再次更新了我的答案,这一次我希望并相信新信息会很有用。
标签: wix windows-installer