![](/img/trans.png)
[英]wix MSI doesn't launch when I run it from CMD using /quiet parameter
[英]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。
日志應該顯示一些內容。
好的,我已經找到錯誤的原因及其解決方法: ALLUSERS
或PREVIOUSINSTALLSCOPE
(從注冊表中讀取)屬性必須設置為“ 1”。 這樣, DISABLE_IMPERSONATE
自定義操作將運行並將USEIMPERSONATE
屬性設置為“ 0”。 然后運行UPDATE_CONFIG
和其他自定義操作。
綜上所述,解決方案是:
將DISABLE_IMPERSONATE
屬性更改為此: <Custom Action="DISABLE_IMPERSONATE" After="AppSearch"><![CDATA[ALLUSERS=1 OR PREVIOUSINSTALLSCOPE="1"]]></Custom>
像這樣調用msiexec: msiexec /i Bechtle.A365.Office.Client.msi /qn ALLUSERS=1
感謝@ Ritmo2k,@ Brian Sutherland和@PhilDW為我指出了正確的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.