簡體   English   中英

WiX Burn Bundle 安裝程序在安裝失敗時返回 ERROR_SUCCESS_REBOOT_REQUIRED - 3010 (0xBC2)

[英]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.

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