2017-05-23 183 views
0

我有一個wix捆綁安裝各種模塊。其中的一個模塊會導致系統重新啓動。現在我想要發生的一種情況是,如果它是UI安裝,那麼在安裝捆綁包的最後我想提示出現,如果它是靜默安裝,那麼我想避免自動重啓,因爲用戶可能不知道安裝會導致重新啓動。Wix刻錄安裝程序沒有重啓靜默安裝

我看了各種線程和選項,發現我可以通過一個「/ norestart」參數進行靜默安裝,並且會照顧不自動重啓。因此,如果用戶未通過「/ norestart」參數並且只有在傳遞該參數時才允許進行靜默安裝,則會失敗。我希望「/ norestart」映射到REBOOT的特定值(https://msdn.microsoft.com/en-us/library/windows/desktop/aa371101(v=vs.85).aspx),但我所觀察到的是,不管我是否通過「/ norestart」參數,日誌中的REBOOT值總是「ReallySuppress」,但當參數傳遞時它不會自動重啓,並且當參數未被傳遞時重啓。我真的很困惑,它是如何確定以及如何以編程方式確定它。

這是從組件中的一個的日誌時它重新啓動(當我沒有通過「/ norestart更新日誌文件」參數)

Command Line: ALLUSERS=1 ARPSYSTEMCOMPONENT=1 MSIFASTINSTALL=7 CWD=<...> REBOOT=ReallySuppress CURRENTDIRECTORY=<...> CLIENTUILEVEL=3 MSICLIENTUSESEXTERNALUI=1 CLIENTPROCESSID=2240 

這是當它不重新啓動(當我通過 「/ norestart更新日誌文件」 參數)

Command Line: ALLUSERS=1 ARPSYSTEMCOMPONENT=1 MSIFASTINSTALL=7 CWD=<...> REBOOT=ReallySuppress CURRENTDIRECTORY=<...> CLIENTUILEVEL=3 MSICLIENTUSESEXTERNALUI=1 CLIENTPROCESSID=1984 

任何幫助或指針被理解。如果你想要我提供更多信息或者如果有什麼不清楚的地方,請告訴我。在此先感謝您的時間。

編號: https://msdn.microsoft.com/en-us/library/windows/desktop/aa372024(v=vs.85).aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/aa371101(v=vs.85).aspx

回答

0

正如你已經發現,MSI軟件包總是從開始重新啓動抑制。

缺少的是引導程序應用程序(例如WixStdBA或自定義/託管BA)控制重新引導。

BA檢查每個MSI軟件包的安裝結果。如果任何MSI軟件包需要重新啓動,引導程序應用程序將啓動重新引導(或者,如果用戶不允許它或/norestart開關被傳遞等)。

命令行開關/norestart只能防止引導程序應用程序在程序包/鏈的末尾啓動重新引導。

我敢肯定,如果您想根據缺少/norestart來阻止安裝,您必須使用自定義引導程序應用程序。

但是,如果您要使用自定義引導程序應用程序,那麼您可能只需更改默認行爲(即使默認行爲爲/norestart)。

0

REBOOT屬性的默認值不是ReallySuppress,所以其他事情正在發生。沒有看源頭,任何自定義操作或MSI,都很難說爲什麼會這樣。完整的詳細日誌可能會顯示正在設置;它可能在MSI的屬性表中;它可以從自定義操作代碼中設置;命令行還有什麼?它需要一些偵探工作。

另一個問題是完全無提示安裝不會要求重啓,因爲無提示意味着它無法提問,所以有些不清楚該設置是否適用於其他屬性,ScheduleReboot可能性等。我發現使用傳統的命令行選項比如/ qb等更容易,因爲它們往往更明確地表明它們的功能。如果需要人們解密它,請在某處發佈完整的詳細日誌。

抑制重新啓動通常不是一個好主意。他們需要的主要原因是文件需要以需要重啓的方式進行替換。這意味着安裝在下次重新啓動之前是不完整的,並且嘗試運行安裝的應用程序可能會導致問題,如果它使用較舊的文件而不是較新的那些尚未到位的應用程序。