【问题标题】:Cancel Installation and Rollback using wix burn Bootstrapper UI使用 wix burn Bootstrapper UI 取消安装和回滚
【发布时间】:2015-07-21 16:42:25
【问题描述】:

我使用的是 Wix 3.7。我正在尝试创建安装我的 msi 的 wix burn 引导程序。我在我的 BA UI 中添加了两个按钮用于安装和取消。我正在使用 C# 进行 BA UI 设计。

我在安装按钮中添加了以下代码以启动安装。

  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 中的取消按钮详细说明如何停止安装吗?

【问题讨论】:

    标签: wix bootstrapper burn


    【解决方案1】:

    许多回调(如Progress)将为您的引导程序应用程序提供参数(如ProgressEventArgs)。在 args 对象中,您可能会看到 Result 属性。要取消,请将Result 属性设置为Result.Cancel。当回调返回到Burn 引擎时,它将看到您将结果设置为取消并启动回滚过程(或在该上下文中执行任何取消方式)。

    【讨论】:

    • 谢谢罗伯。我在 ExcuteProgress 中添加了 e.Result=Result.Cancel,它被取消了。我需要再澄清一下,我在 msi 中有一些自定义操作。我在 ExcuteProgress 中添加了 Result.Cancel。因此,如果我在执行自定义操作时取消安装,则在完成该特定自定义操作后会取消安装。如果 CA 需要更多时间意味着,我必须等待那么多时间。是否有任何解决方案可用于在中途取消 CA 执行?有什么建议吗?
    • 在自定义操作期间发送进度消息,他们可以更快地收到取消和中止。您必须正确编写自定义操作,它才会起作用。
    • 谢谢罗伯。我在执行 CA 时取消设置时遇到了一些问题。我的 msi 有 5 个自定义操作。如果我在第一个(或任何)CA 运行时取消设置,则所有其他 CA 在执行该特定 CA 后按顺序调用。我已将我所有 CA 的 Execute 属性的值设置为 immediate Execute="immediate。我已经在 ApplyExecuteProgress 回调中有一个代码 Result.Cancel 。在日志文件中,我发现了这样的错误。 MSI (s) (10:D8) [06:05:32:442]: I/O on thread 2368 could not be cancelled. Error: 1168你能告诉我停止 CA 的任何建议吗?
    • 这听起来像是一个新问题。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2013-12-04
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多