您不能覆蓋MsiExec的文本。您只能覆蓋MSI表中的一些消息「Error」和「ActionText」,後者用於顯示進度條的安裝過程中的消息。
最重要的是,在「錯誤」表中的編號是內部編號和無關具有返回錯誤代碼:
隨着維克斯可以覆蓋表的內容「錯誤「但正如你可以在你的鏈接或例子msi文件中看到的那樣,特別是編號是自己的編號,並且與返回碼(0,1603,3010,1642,...)及其消息無關。我認爲,這些錯誤消息中的大部分都是針對日誌文件中的輸出的,但我認爲,它們也會在對話框中顯示出來,所以必須嘗試一下。
對於返回錯誤代碼1642,適當的文本不在該表中。有補丁相關的錯誤消息,如沒有。 1328舉例說明,但它們適用於其他場景。
但通常你不會讓用戶通過雙擊或自己輸入msiexec命令來啓動,是嗎? 取而代之的是這樣做的批處理/腳本/ setup.exe或安裝程序服務。
在那裏你必須包裝消息。許多安裝都是這樣做的,並且開始安裝本身,例如靜音與「msiexec /quiet
」或「msiexec /qn
」
簡體批次例如:(結構化當然更好的if/else,但是這取決於你想給自己的消息,這些消息的返回碼)
call msiexec /i "c:\mypath\mysetup.msi" /qn /L*v "c:\mylog.log"
SET SetupSuccess=%ERRORLEVEL%
if '%SetupSuccess%' EQU '0' echo Yes, setup successful.
if '%SetupSuccess%' EQU '1642' (
echo.
echo "You must install my product before installing this patch."
)
我確實有一個啓動msiexec的可執行文件,但它以完整的UI運行,因此用戶將看到錯誤消息。我想我可以在嘗試安裝修補程序之前檢查目標產品是否存在。它似乎是多餘的。 – chickenpie 2014-10-02 12:01:18
Windows安裝程序會在修補程序執行任何操作之前發現該錯誤。如果未安裝目標產品,則Windows會處理該問題,而不是您。如果您用可執行文件打包補丁程序,首先看到您的產品代碼是否已安裝,那麼您可以創建自己的消息。更進一步,看看安裝的版本是否低於你的補丁版本,如果你想說它不適用(或已經安裝)用你自己的話。 MsiGetProductInfo()和MsiApplyPatch() – PhilDW 2014-10-02 20:01:56
是的,我同意PhilDW。這不是多餘的,而是一個很好的檢查方法。一個特定的測試功能(如果該補丁適用)是MsiDeterminePatchSequence()。我自己並沒有使用它,但是在第二次閱讀文檔後,似乎沒有那麼不方便,因爲在第一次閱讀之後。 :-) – Philm 2014-10-03 14:15:08