2014-10-01 130 views
0

有沒有方法可以更改由Wii中的MsiExec給出的錯誤消息? 我的目標是自定義用戶在未安裝目標產品的情況下嘗試安裝修補程序時出現的消息。WiX:更改MsiExec.exe錯誤消息(不是Windows安裝程序錯誤消息)

我曾嘗試加入

<Error Id="1642">You must install my product before installing this patch.</Error> 

的UI部分,但它似乎並沒有工作。

我懷疑Windows Installer errorsMsiExec errors之間有很大的差異。

有沒有人曾經這樣做過?

回答

0

您不能覆蓋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." 
) 

+0

我確實有一個啓動msiexec的可執行文件,但它以完整的UI運行,因此用戶將看到錯誤消息。我想我可以在嘗試安裝修補程序之前檢查目標產品是否存在。它似乎是多餘的。 – chickenpie 2014-10-02 12:01:18

+1

Windows安裝程序會在修補程序執行任何操作之前發現該錯誤。如果未安裝目標產品,則Windows會處理該問題,而不是您。如果您用可執行文件打包補丁程序,首先看到您的產品代碼是否已安裝,那麼您可以創建自己的消息。更進一步,看看安裝的版本是否低於你的補丁版本,如果你想說它不適用(或已經安裝)用你自己的話。 MsiGetProductInfo()和MsiApplyPatch() – PhilDW 2014-10-02 20:01:56

+0

是的,我同意PhilDW。這不是多餘的,而是一個很好的檢查方法。一個特定的測試功能(如果該補丁適用)是MsiDeterminePatchSequence()。我自己並沒有使用它,但是在第二次閱讀文檔後,似乎沒有那麼不方便,因爲在第一次閱讀之後。 :-) – Philm 2014-10-03 14:15:08