我用WiX创建了一个Bootstrapper。它包含一个带有两个MSI-Packages的链。当它正在运行时,它正在调用一个显示View的.NET-CustomAction(如此示例:http://bryanpjohnston.com/2012/09/28/custom-wix-managed-bootstrapper-application),用户可以在其中选择一些设置。
现在,当用户在此视图中选择特殊设置时,我必须仅安装第一个msi。我现在正在寻找一种方法来做到这一点。最简单的方法是,我可以从我的.NET类(ViewModel)运行MSI-Installation。但是如何访问MSI-Bootstrapper中包含的MSI-Package并运行它呢?
答案 0 :(得分:3)
当Burn计划你的MSI包时,它会以你所覆盖的每个包的“请求状态”回调。要查看此附加到PlanPackageBegin
事件。该事件由PlanPackageBeginEventArgs
提供。在那些事件args中,您将看到State
字段,该字段将告诉您默认情况下Burn将为该程序包执行的操作。您可以将State
字段设置为您想要的任何RequestState
。
例如,如果包不在,而您Plan()
LaunchAction.Install
,则State
将为RequestState.Present
。您的自定义BA代码可以将其更改为您想要的RequestState
。因此,您的UI可以说,“我知道您认为应该安装该软件包,但是该用户取消选中安装FooWidget的框,以便创建该软件包RequestState.Absent
。”
日志文件将显示计划的结果,在调试时非常有用。