2013-03-10 84 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

相关问题