2013-03-10 86 views
2

我正在使用Wix 3.7。我正在嘗試創建安裝我的msi的wix burn bootstrapper。我在BA用戶界面中添加了兩個用於安裝和取消的按鈕。我正在使用C#進行BA UI設計。使用wix刻錄引導程序取消安裝和回滾UI

我在Install按鈕中添加了以下代碼以用於啓動安裝。

MySampleBA.Model.Engine.Detect(); 
    MySampleBA.hwnd = IntPtr.Zero;   
    MySampleBA.Model.Bootstrapper.PlanBegin += this.PlanBegin; 
    MySampleBA.Model.Bootstrapper.DetectPackageComplete += this.DetectedPackage; 
    MySampleBA.Model.Bootstrapper.DetectComplete += this.DetectComplete; 
    MySampleBA.Model.Bootstrapper.PlanPackageBegin += this.PlanPackageBegin; 
    MySampleBA.Model.Bootstrapper.PlanComplete += this.PlanComplete; 
    MySampleBA.Model.Bootstrapper.ExecuteMsiMessage += this.ExecuteMsiMessage; 
    MySampleBA.Model.Bootstrapper.ExecuteProgress += this.ApplyExecuteProgress; 
    MySampleBA.Model.Bootstrapper.PlanMsiFeature += this.PlanMsiFeature; 
    MySampleBA.Model.Bootstrapper.PlanPackageComplete += this.PlanPackageComplete; 
    MySampleBA.Model.Bootstrapper.Progress += this.ApplyProgress; 
    MySampleBA.Model.Bootstrapper.CacheAcquireProgress += this.CacheAcquireProgress; 
    MySampleBA.Model.Bootstrapper.CacheComplete += this.CacheComplete; 
    MySampleBA.Model.Bootstrapper.Error += this.ExecuteError; 
    MySampleBA.Model.Bootstrapper.ExecutePackageComplete += this.ExecuteComplte; 

,並推出採用

MySampleBA.Model.Engine.Plan(LaunchAction.Install); 
    MySampleBA.Model.Engine.Apply(MySampleBA.hwnd); 

安裝工作正常安裝。但是我在中途取消安裝時遇到問題。

我看到了bootstrapper application rollback鏈接。但是我無法得知關於IDCANCEL和如何從按鈕單擊觸發錯誤事件的想法。

任何人都可以通過單擊BA UI中的取消按鈕來詳細說明如何停止安裝嗎?

回答

7

許多回調(如Progress)將爲您的引導程序應用程序提供參數(如ProgressEventArgs)。在參數對象中,您可能會看到一個Result屬性。要取消,請將Result屬性設置爲Result.Cancel。當回調回到Burn引擎時,它會看到您將結果設置爲取消並啓動回滾過程(或者在該上下文中執行任何取消手段)。

+0

謝謝Rob。我在ExcuteProgress中添加了e.Result = Result.Cancel,它取消了取消。 我需要一個更多的說明,我在msi中有一些自定義操作。 我在ExcuteProgress中添加了Result.Cancel。因此,如果我在自定義操作執行時取消安裝,則在完成特定自定義操作後,安裝會取消。 如果CA需要更多的時間,我必須等待那麼長的時間。 是否有任何解決方案可以在中期取消CA執行?任何建議? – saravan1010 2013-03-10 21:05:09

+0

在自定義操作過程中發送進度消息,他們可以收到取消並更快地中止。您必須正確編寫自定義操作,它才能起作用。 – 2013-03-11 14:04:08

+0

謝謝Rob。在執行CA時取消安裝程序時出現問題。我用我的msi有5個自定義操作。如果我在第一個(或任何)CA運行時取消設置,則在執行該特定CA之後,將按順序調用所有其他CA.我已經設置了我所有CA的Execute屬性的值是'immediate'' Execute =「immediate'。我已經在ApplyExecuteProgress回調中有一個代碼Result.Cancel 在日誌文件中,我發現了類似這樣的錯誤。 'MSI(s)(10:D8)[06:05:32:442]:線程2368上的I/O無法取消。錯誤:1168' 您能否告訴我任何關於停止CA的建議? – saravan1010 2013-03-18 12:21:30

相關問題