本文介绍了如何在使用 WiX Burn MBA Bundles 的 MajorUpgrade 期间检测当前安装的功能?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用 WiX 3.7 的 Burn/Managed Bootstrapper Application 功能来创建基于 MBA 的自定义安装程序.对于我的包链中的每个包,在执行 MinorUpdate 时,我可以轻松检测哪些包功能已安装,以确保在升级期间通过使用引导程序的 WiX 基类中提供的这些事件来维护这些功能选择:DetectPackageComplete
、DetectMsiFeature
、DetectRelatedBundle
、DetectRelatedMsiPackage
、DetectComplete
.
但是,在 MajorUpgrade 期间,我只看到了一种确定安装了哪些软件包的方法,但没有看到如何确定安装了哪些功能,因为 DetectMsiFeature 事件不会触发. 我尝试在产品配置上使用 MigrateFeatures
标志,但这似乎不起作用(或者我没有正确使用它).
在 WiX 中使用自定义托管引导程序应用程序执行 MajorUpgrade 时,检测/迁移现有功能的正确方法是什么?
<小时/>
一些文件片段:
注意:如果有帮助,我可以提供一个包含所有代码的完整的 VS 解决方案.
捆绑.wxs:<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"><Bundle Name="Bootstrapper1" Version="1.1.0.0" Manufacturer="Knights Who Say Ni" UpgradeCode="e6fbf160-d1d9-4b38-b293-94d60eae876f" Compressed="yes"><BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost" ><Payload SourceFile="$(var.ManagedBootstrapperApplication.TargetPath)"/><!-- 这里有其他文件--></BootstrapperApplicationRef><链><PackageGroupRef Id="NetFx40Web"/><MsiPackage SourceFile="$(var.SetupProject1.TargetPath)" EnableFeatureSelection="yes" Vital="yes" Compressed="yes"/></链></捆绑></维克斯>
产品.wxs:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"><产品 ID="*" 名称="SetupProject1" 语言="1033" 代码页="1252"版本="1.1.0.0" 制造商="说你的骑士"UpgradeCode="5fcd463a-3287-4fdf-bf00-d5d74baeccda"><Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine"/><MajorUpgrade AllowSameVersionUpgrades="no" AllowDowngrades="no" MigrateFeatures="yes" DowngradeErrorMessage="给我带来灌木丛!"/><MediaTemplate EmbedCab="yes"/><Feature Id="feature_one" Title="主要特征" Level="1"><组件 ID="CMP_emptyFile1" Guid="{1740AFA6-A98F-482A-B319-A153AA1BEF10}" Directory="INSTALLFOLDER"><File Id="file_emptyFile1" Checksum="yes" KeyPath="yes" Source="TextFile1.txt"/></组件></功能><Feature Id="feature_Two" Title="可选功能" Level="2"><组件 ID="CMP_emptyFile2" Guid="{F0831C98-AF35-4F5E-BE9A-2F5E3ECF893C}" Directory="INSTALLFOLDER"><File Id="file_emptyFile2" Checksum="yes" KeyPath="yes" Source="TextFile2.txt"/></组件></功能></产品></维克斯>
CustomBootstrapper.cs
公共类 CustomBootstrapperApplication : BootstrapperApplication {受保护的覆盖无效运行(){DetectPackageComplete += HandlePackageDetected;DetectMsiFeature += HandleFeatureDetected;DetectRelatedBundle += HandleExistingBundleDetected;DetectRelatedMsiPackage += HandleExistingPackageDetected;检测完成 += 处理检测完成;this.Engine.Detect();//在这里阻塞直到 DetectComplete 触发...}私人无效HandleExistingPackageDetected(对象发送者,DetectRelatedMsiPackageEventArgs e){Log(string.Format("检测到的相关包 {2} ({1}) 在版本 {3} 这是一个 {0}",e.Operation, e.PackageId, e.ProductCode, e.Version));}私人无效HandleExistingBundleDetected(对象发送者,DetectRelatedBundleEventArgs e){Log(string.Format("检测到的相关 {2} Bundle {0} 在版本 {1},它是一个 {3}",e.ProductCode、e.Version、e.RelationType、e.Operation));}私人无效HandleFeatureDetected(对象发送者,DetectMsiFeatureEventArgs e){Log(string.Format("在状态 {2} 中检测到包 {1} 中的功能 {0}",e.FeatureId, e.PackageId, e.State));}私人无效HandlePackageDetected(对象发送者,DetectPackageCompleteEventArgs e){Log(string.Format("在状态 {1} 中检测到包 {0}",e.PackageId, e.State));}私人无效HandleDetectComplete(对象发送者,DetectCompleteEventArgs e){/* 释放主线程继续工作 *
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!