簡體   English   中英

WiX:使用msiexec / i Setup.msi / qn(沒有UI的安靜模式安裝)時,自定義操作不運行

[英]WiX: Custom Actions don't run when using msiexec /i Setup.msi /qn (quiet mode installation without UI)

我們的問題是,使用msiexec / i Setup.msi / qn(無UI的安靜模式安裝)時,自定義操作不會運行。 它們僅在使用UI進行常規安裝的情況下運行。

例如,在我們的Product.wxs中,我們定義了以下內容:

<Binary Id="SetupCustomAction" SourceFile="$(var.SetupCustomActions.TargetDir)$(var.SetupCustomActions.TargetName).CA.dll" />

<CustomAction Id="UPDATE_CONFIG" BinaryKey="SetupCustomAction" DllEntry="UpdateConfiguration" Execute="commit" Return="check" Impersonate="no" />

<InstallExecuteSequence>
    ...
    <Custom Action="UPDATE_CONFIG" After="InstallFiles"><![CDATA[NOT Installed AND USEIMPERSONATE="0"]]></Custom>
    ...
</InstallExecuteSequence>

我們是否必須使用“安靜執行自定義操作” ,但是嘗試這樣做沒有幫助!

請幫忙!

明顯的解釋是USEIMPERSONATE的值為1,因此自定義操作將不會運行,但是我認為也許您在命令行上將其設置為0。

除此之外,了解安裝是否實際會很有用,因為如果通常需要使用UAC提示進行提升,則不會顯示此UAC對話框,因此自定義操作將不會提升運行並且將失敗。 安裝可能會成功,因為在安裝后會運行Commit自定義操作,因此“檢查”是不相關的,因為安裝無法回滾。 如果將CA配置為安裝自定義操作,則CA可能會失敗並回滾安裝。 因此,在InstallFiles之后也不相關,因為它是一個CommitCA。

日志應該顯示一些內容。

好的,我已經找到錯誤的原因及其解決方法: ALLUSERSPREVIOUSINSTALLSCOPE (從注冊表中讀取)屬性必須設置為“ 1”。 這樣, DISABLE_IMPERSONATE自定義操作將運行並將USEIMPERSONATE屬性設置為“ 0”。 然后運行UPDATE_CONFIG和其他自定義操作。

綜上所述,解決方案是:

  1. DISABLE_IMPERSONATE屬性更改為此: <Custom Action="DISABLE_IMPERSONATE" After="AppSearch"><![CDATA[ALLUSERS=1 OR PREVIOUSINSTALLSCOPE="1"]]></Custom>

  2. 像這樣調用msiexec: msiexec /i Bechtle.A365.Office.Client.msi /qn ALLUSERS=1

感謝@ Ritmo2k,@ Brian Sutherland和@PhilDW為我指出了正確的方向。

暫無
暫無

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

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