[英]WiX Burn Bundle Installer Returns ERROR_SUCCESS_REBOOT_REQUIRED - 3010 (0xBC2) Upon Installation Failure
當鏈接在我的 WiX 包中的一個 MSI 包安裝失敗時,包安裝程序回滾到那時已經處理的其他 MSI 包,然后返回 ERROR_SUCCESS_REBOOT_REQUIRED - 3010 (0xBC2),這意味着“請求的操作成功。更改系統重啟后才會生效。” 鑒於捆綁包中的某些 MSI 軟件包在安裝或卸載后需要重新啟動,因此無論安裝是否成功,返回代碼都應指示需要重新啟動。 但是,在上述情況下,我期望返回代碼是 ERROR_FAIL_REBOOT_REQUIRED - 3017 (0xBC9) 因為安裝失敗,我很困惑為什么我反而“成功”了。
以下是捆綁包安裝程序生成的日志片段,顯示安裝程序知道失敗的結果:
[0E04:0BA4][2022-03-31T15:56:20]i399: Apply complete, result: 0x80070643, restart: Required, ba requested restart: No
[0E04:0BA4][2022-03-31T15:56:20]i500: Shutting down, exit code: 0xbc2
作為參考,我的捆綁安裝程序的 WiX 腳本是這樣寫的:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Bundle Name="..." Version="..." UpgradeCode="..." Manufacturer="...">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
<bal:WixStandardBootstrapperApplication LicenseUrl="" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" />
</BootstrapperApplicationRef>
<Chain>
<MsiPackage SourceFile="..." />
<MsiPackage SourceFile="..." />
<MsiPackage SourceFile="..." />
<MsiPackage SourceFile="..." />
<MsiPackage SourceFile="..." />
</Chain>
</Bundle>
</Wix>
我做錯了什么,或者這是 WiX 中的錯誤?
我確認失敗的 MSI package 在使用 MsiExec 單獨執行安裝失敗時返回 ERROR_INSTALL_FAILURE - 1603 (0x643),這與從捆綁安裝程序 (0x80070643) 記錄的結果代碼匹配。
這樣做的代碼行在 WixStandardBootstrapperApplication.cpp(1140)中:
// initiate engine shutdown
DWORD dwQuit = HRESULT_CODE(hr);
if (BOOTSTRAPPER_APPLY_RESTART_INITIATED == pThis->m_restartResult)
{
dwQuit = ERROR_SUCCESS_REBOOT_INITIATED;
}
else if (BOOTSTRAPPER_APPLY_RESTART_REQUIRED == pThis->m_restartResult)
{
dwQuit = ERROR_SUCCESS_REBOOT_REQUIRED;
}
pThis->m_pEngine->Quit(dwQuit);
查看該代碼會發現需要重新啟動並返回該結果,而不考慮是否還涉及故障。 似乎是一個合理的功能請求,您可以在WiX v4中實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.