我已經使用Installshield 2014創建了一個MSI安裝程序。從UI運行它時一切正常,但是當我使用下面的命令以靜默模式運行它時,我的自定義操作根本沒有發射:如何在靜默模式下運行MSI安裝程序時運行自定義操作
C:\>msiexec /i "myApplication.msi" /qn WEBURL=http://localhost/mywebapp /log out.txt
WEBURL
是自定義操作所需的屬性。作爲參數傳遞給C#類庫方法的值爲WEBURL
。 C#方法由我的自定義操作調用,在開始安裝嚮導步驟中單擊「安裝」按鈕時會調用該方法。我的自定義操作始終得到執行,即我將執行自定義操作的條件保存爲1
,這意味着它在任何情況下都會執行。
在日誌文件中,我還看到WEBURL
屬性獲取正確設置的值。我無法知道在靜默模式下運行安裝程序時會停止自定義操作的啓動方式嗎?
更新:如Michael所建議的,在將自定義動作置於InstallExecuteSequence
之後,它開始以無聲模式執行。但現在問題在於它開始在UI模式下執行兩次,因爲通過點擊在InstallUISequence
期間出現的對話框之一的按鈕已經執行了相同的動作。所以我想執行我的自定義操作,只有當我以靜默模式運行安裝程序時纔會將其設置爲InstallExecuteSequence
(因此,如果我處於UI模式,它只會執行一次)。
如果我將自定義操作放在'InstallExecute'序列中,那麼它將以UI和靜默模式運行。在UI模式下,它會運行兩次,一次來自UI對話框之一,另一次來自「InstallExecute」序列。我無法從UI對話框中刪除它,因爲我可能必須根據一些UI檢查多次運行它。我如何確保即使我在「InstallExecute」序列中添加自定義操作,然後它僅在靜默模式下觸發*。 – RBT
@RBT:我更新了我的答案,將FirstSequence和UILevel作爲僅在一個序列中執行的選項。 –
自定義操作計劃選項爲我做了訣竅。我所有的自定義操作都按照「始終執行」進行安排。當我將它改爲「只執行一次」時,它開始按照我的預期工作。我相信'UILevel' thingy在我的場景中也可能是相關的,但我們在安裝程序INSTALLUILEVEL_FULL和INSTALLUILEVEL_NONE中只支持兩種模式。如果我在執行自定義操作時需要這種級別的控制權,我會使用它。我還添加了一個屏幕截圖,以展示您的帖子中的執行計劃更改,因爲它可以幫助讀者。感謝您的跟進。 – RBT