2014-10-10 75 views
2

我正在用WiX Burn創建託管引導程序應用程序。我需要處理一些可能需要強制重新啓動的ExePackage elementsThis question有一些關於如何處理重新啓動的誘人線索,但我無法正常工作。WiX Burn管理引導程序手柄如何強制重新啓動?

我在ExePackage元素中有<ExitCode Value="3010" Behavior="forceReboot" />,我可以看到在日誌中觸發。我正在收聽BootstrapperApplicatione.Result = Result.Restart引發的Shutdown事件,但我還沒有弄清楚如何捕獲在應用階段檢測到強制重新啓動時應該發生的情況。我正在測試if (Command.Resume == ResumeType.Reboot),Run我的BootstrapperApplication方法直接進入我的自定義用戶界面的進度條部分,但我不確定如何恢復應用階段。在這種情況下,我需要撥打Engine.Detect()還是Engine.Apply?我需要採取一些特殊的行動來堅持並恢復狀態以便在重新啓動後繼續存在,或者刻錄引擎是否可以在內部處理所有這些問題?

如果任何人都可以指向我的一個WiX Burn管理引導程序應用程序處理重新啓動的工作示例,我將不勝感激。

回答

3

檢查WixStandardBA的實施,即使它沒有管理。基本上,它執行以下操作:

  1. 在啓動時,檢查WixBundleForcedRestartPackage變量並將其存儲在m_sczAfterForcedRestartPackage

  2. 致電Detect正常。

  3. 致電Plan正常。

  4. OnPlanPackageBegin中,跳過包直到導致重新啓動的包。

  5. 致電Apply正常。

燒傷負責在重新啓動時保持變量。

+0

謝謝,肖恩。我認爲你的回答讓我非常接近,但是在我看來,Burn並沒有在重啓過程中保留變量。我有幾個變量聲明如下:'<變量名稱=「InstallProductN」Type =「字符串」值=「」Persisted =「是」/>'。當用戶選擇將該產品安裝在託管引導程序UI中時,我可以看到這些設置爲「是」,但是在重新引導後它會重新初始化爲空字符串。我是否需要在託管引導程序代碼中執行某些操作來觸發變量狀態的保存或恢復? – 2014-10-14 15:10:43

+0

啊,我的代碼是在產品被檢測到時將變量設置爲'是',否則將'否'。這是重寫恢復的狀態。令人好奇的是,Burn日誌顯示變量在重新啓動後被初始化爲空字符串,但從未顯示要恢復的持久值 - 除非您以後專門將值輸出到日誌中。但無論如何,它現在正在工作。謝謝! – 2014-10-14 15:39:57

相關問題