【问题标题】:How can a WiX Burn managed bootstrapper handle force reboots?WiX Burn 托管引导程序如何处理强制重启?
【发布时间】:2014-12-05 20:04:36
【问题描述】:

我正在使用WiX Burn 创建一个托管引导程序应用程序。我需要处理一些可能需要强制重启的ExePackage elementsThis question 有一些关于如何处理重启的诱人线索,但我无法让它正常工作。

我在ExePackage 元素中有<ExitCode Value="3010" Behavior="forceReboot" />,我可以在日志中看到触发。我正在收听BootstrapperApplication 引发的Shutdown 事件并设置e.Result = Result.Restart,尽管我还没有弄清楚如何捕获在应用阶段检测到强制重启时应该何时发生这种情况的条件.我在RunRun 方法中测试if (Command.Resume == ResumeType.Reboot),直接进入我的自定义UI 的进度条部分,但我不确定如何从中断的地方恢复应用阶段。在这种情况下,我需要致电Engine.Detect()Engine.Apply 吗?是否需要采取一些特殊操作来保持和恢复状态以在重新启动后继续存在,或者 Burn 引擎是否在内部处理所有这些?

如果有人能指出一个处理重启的 WiX Burn 托管引导程序应用程序的工作示例,我将不胜感激。

【问题讨论】:

    标签: wix restart burn wix3.8


    【解决方案1】:

    查看WixStandardBA 的实现,即使它不受管理。基本上它执行以下操作:

    1. 在启动时,检查WixBundleForcedRestartPackage变量并将其存储在m_sczAfterForcedRestartPackage中。

    2. 像往常一样拨打Detect

    3. 像往常一样拨打Plan

    4. OnPlanPackageBegin 中,跳过包,直到导致重新启动的包。

    5. 像往常一样拨打Apply

    Burn 负责在重启过程中保持变量。

    【讨论】:

    • 谢谢,肖恩。我认为您的回答让我非常接近,但在我看来,Burn 并没有在重启过程中持续存在变量。我有几个这样声明的变量:<Variable Name="InstallProductN" Type="string" Value="" Persisted="yes" />。当用户选择在托管引导程序 UI 中安装该产品时,我可以看到这些设置为“是”,但在重新启动后它会重新初始化为空字符串。我是否需要在我的托管引导程序代码中执行某些操作来触发变量状态的保存或恢复?
    • 啊,如果检测到产品,我的代码将变量设置为“是”,如果没有,则设置为“否”。这覆盖了恢复的状态。奇怪的是,Burn 日志显示变量在重新启动后被初始化为空字符串,但从未显示正在恢复的持久值 - 除非您稍后专门将该值输出到日志中。但无论如何,它现在正在工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多