2013-03-17 114 views
1

我已经用WiX创建了一个Bootstrapper。它包含一个有两个MSI包的链。当它运行时,它调用显示View的.NET-CustomAction(如此示例:http://bryanpjohnston.com/2012/09/28/custom-wix-managed-bootstrapper-application),用户可以在其中选择某些设置。WiX Bootstrapper - 从CustomAction安装MSI

现在,当用户在此视图中选择特殊设置时,我必须安装第一个msi。我正在寻找一种方法来做到这一点。最简单的方法是,我可以从我的.NET类(ViewModel)运行MSI-Installation。但是,如何访问包含在MSI-Bootstrapper中的MSI包并运行它?

回答

2

当Burn计划您的MSI软件包时,它会针对您可覆盖的每个软件包以“请求的状态”进行回调。要将此附加到PlanPackageBegin事件。该事件提供了PlanPackageBeginEventArgs。在这些事件参数中,您会看到State字段,它会告诉您默认情况下Burn会为该程序包执行的操作。您可以将State字段设置为您想要的任何RequestState

例如,如果包装不存在,并且您Plan()LaunchAction.Install那么State将是RequestState.Present。您的自定义BA代码可以将其更改为您想要的任何RequestState。因此,你的用户界面可以说:“我知道你认为你应该安装这个软件包,但是这个用户没有选中安装FooWidget的盒子,所以请使用这个软件包RequestState.Absent。”

日志文件将显示计划的结果,并且在调试时非常有用。

+0

谢谢你的帮助。是否还有一种方法可以将Bootstrapper中的变量传递给MSI包? – BennoDual 2013-03-18 18:25:38

+0

是的,请参阅MsiPackage元素的MsiProperty元素子元素。 – 2013-03-18 21:21:41