簡體   English   中英

WiX:默認情況下如何在 REINSTALL=ALL 中安裝創建的補丁?

[英]WiX: how to install created patch in REINSTALL=ALL by default?

我使用 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 就可以正常安裝。

如果正在安裝修補程序,則可以嘗試將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>

發帖是因為我沒有看到列出的這個潛在修復——

如果文件具有相同的版本號,命令行指令會成功替換文件,這讓我有點驚訝。 REINSTALLMODE 指令“o---”應該意味着只有較低版本的文件才會被重新安裝。

無論如何,我認為這個問題也可以通過將 MSI 安裝程序的 REINSTALLMODE 的內部設置更改為“a---”來解決。 “a” REINSTALLMODE 屬性表示應重新安裝所有文件,無論版本或校驗和如何。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM