Wix Burn:如果没有网络框架,则基本 UI 处理
Posted
技术标签:
【中文标题】Wix Burn:如果没有网络框架,则基本 UI 处理【英文标题】:Wix Burn: Basic UI handling if No Net Framework is there 【发布时间】:2014-01-24 12:43:20 【问题描述】:我使用 Win-Forms 在 C# 中为 Net Framework 2.0 编写了一个 Boostrapper UI。它开始正常工作,并且设计的表单按预期响应。
这是我的 Wix 捆绑代码:
<?define TargetFile=$(var.MyBA.TargetDir)$(var.MyBA.TargetFileName)?>
<?define BootstrapConfigFile=$(var.MyBA.ProjectDir)BootstrapperCore.config?>
<Bundle Name="Bootstrapper1" Version="1.0.0.0" Manufacturer="Farrukh" UpgradeCode="54c4a4a4-dca8-4ae4-b2f4-5e3f3fd8cb92">
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
<Payload SourceFile="$(var.BootstrapConfigFile)"/>
<Payload SourceFile="$(var.TargetFile)"/>
<Payload SourceFile="$(env.WIX)\SDK\Microsoft.Deployment.WindowsInstaller.dll"/>
</BootstrapperApplicationRef>
<WixVariable Id="WixMbaPrereqPackageId" Value="Netfx4Full" />
<WixVariable Id="WixMbaPrereqLicenseUrl" Value="NetfxLicense.rtf" />
<Chain>
<!--<PackageGroupRef Id='Netfx4Full' />-->
<MsiPackage Id="MyInstaller"
Cache="no"
Visible="yes"
DisplayInternalUI="yes"
SourceFile="MyProduct.msi"
/>
</Chain>
</Bundle>
如您所见,它不包含 NetFX 包,并且需要 Net-Framework 2.0,因此我尝试重命名 Net Framework 注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup-Renamed
和 32 位
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup-Renamed
这样它就无法检测到它。这导致显示一个非常基本的 UI:即
我相信,这是由于我的 Bundle 中的以下标记而显示的,但我不确定
<WixVariable Id="WixMbaPrereqPackageId" Value="Netfx4Full" />
<WixVariable Id="WixMbaPrereqLicenseUrl" Value="NetfxLicense.rtf" />
但是,当我点击“接受并安装”时,什么也没发生,按钮就消失了。这可能是因为我没有添加 NetFx 包,也没有添加任何对 WixNetFxExtension 的引用。 (我肯定会添加这些,稍后会看到结果)。
问题:我想编辑这个基本 UI,所以如果我的用户尝试在 Windows XP(没有 Net Framework)上安装它,他/她会得到我设计的 UI,而不是这个基本的。那么如何编辑这个基本 UI?
我觉得,我在这里遗漏了一些基本的东西,但需要一些指导.. 非常感谢任何帮助/指导。
问候
【问题讨论】:
【参考方案1】:在 Wix 用户的邮件列表中找到一个线程后,我能够解决这个问题。这里是:customizing burn prerequisite boostrapper image in theme
所以这个屏幕被称为 Burn Prerequisite,它有一个特殊的 WixVariable ID。下面是来自我的 Bootstrapper 的代码,描述了在 Burn 的 pre-req 屏幕中使用我自己的自定义主题:
<WixVariable Id="PreqbaThemeXml" Value="..\resources\MbaPrereqTheme.xml" />
<WixVariable Id="PreqbaThemeWxl" Value="..\resources\MbaPrereqTheme.wxl" />
您在 MbaPrereqTheme.xml 中引用的任何资源(如 Logo.png、Banner.bmp 和 NetfxLicense.rtf 等)都必须作为有效负载作为 Bootstrapper 的一部分:
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost" >
<Payload SourceFile="$(var.BootstrapConfigFile)"/>
<Payload SourceFile="$(var.MyBootstrapDll)"/>
<Payload SourceFile="$(env.WIX)\SDK\Microsoft.Deployment.WindowsInstaller.dll"/>
<!-- Following are required as payload and to be used by Pre-Req screen.-->
<Payload SourceFile="..\resources\logo.png"/>
<Payload SourceFile="..\resources\Banner.bmp"/>
<Payload SourceFile="..\resources\NetfxLicense.rtf"/>
</BootstrapperApplicationRef>
这就像我希望的那样开始工作:)。
问候
【讨论】:
令人遗憾的是,整个 wix/burn 系统的功能如此强大,但却缺乏如此多的文档。感谢您的洞察力!以上是关于Wix Burn:如果没有网络框架,则基本 UI 处理的主要内容,如果未能解决你的问题,请参考以下文章
Wix/Burn - 不运行 MSIPackage 的条件,因此不卸载应用程序