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 支持两用 msi 包吗?

Wix/Burn - 不运行 MSIPackage 的条件,因此不卸载应用程序

Wix 3.7 Burn - 如何使用动态信息制作自定义启动画面

WiX Burn:如何将安装程序可执行文件部署到某个位置?

Wix Burn exepackage 属性

Wix Burn 没有将命令行参数传递给相关软件包(同一安装程序的旧版本)