wix - 在我的刻录 Bootstrap 中打包 .Net 可再发行组件

标签 wix burn wix3.9

我正尝试按照此 page 上的说明将 .Net 4.5.2 可再发行组件打包到我的刻录应用程序中.

但是在临时刻录位置找不到文件。

根据日志 burn 尝试在此处找到文件:

[0A14:09C4][2015-05-12T16:48:52]w343: Prompt for source of package: NetFx452Redist, payload: NetFx452Redist, path: `C:\Users\simon\Desktop\redist\NDP452-KB2901907-x86-x64-AllOS-ENU.exe`

但文件实际上最终在一个临时文件夹中

例如。

C:\Users\simon\AppData\Local\Temp\{f5207472-d2a0-4b00-b9ee-c535385bde58}\redist\NDP452-KB2901907-x86-x64-AllOS-ENU.exe

说明说要这样做:

<PayloadGroup Id="NetFx452RedistPayload">
  <Payload Name="redist\NDP452-KB2901907-x86-x64-AllOS-ENU.exe"
           SourceFile="..\..\Binaries\Microsoft\NetFramework\4.5.2\NDP452-KB2901907-x86-x64-AllOS-ENU.exe"/>
</PayloadGroup>

如何让 Burn 在正确的位置查找 .net 安装程序?

最佳答案

而不是引用NetFxExtension您可以通过直接引用 .NET 安装包来获得更多控制权:

<Fragment>
  <!-- Value of the 'Release' registry value when .NET 4.5.2 is installed -->
  <?define NetFx452MinRelease = 379893 ?>

  <!-- Get the release of the .NET V4 framework currently installed -->
  <util:RegistrySearch
        Id="NETFRAMEWORK4"
        Variable="NETFRAMEWORK4"
        Root="HKLM"
        Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
        Value="Release"
        Result="value" />

  <!-- Install .NET 4.5.2 if not already installed -->
  <PackageGroup Id="NetFx4FullRedist">
    <ExePackage
        Id="NetFx4FullRedist"
        Cache="no"
        Compressed="yes"
        InstallCommand="/q /norestart /ChainingPackage &quot;[WixBundleName]&quot;"
        RepairCommand="/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot;"
        UninstallCommand="/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot;"
        PerMachine="yes"
        DetectCondition="NETFRAMEWORK4 &gt;= $(var.NetFx452MinRelease)"
        Vital="yes"
        Permanent="yes"
        Protocol="netfx4"
        SourceFile="..\..\Binaries\Microsoft\NDP452-KB2901907-x86-x64-AllOS-ENU.exe"
        Name="Redist\NDP452-KB2901907-x86-x64-AllOS-ENU.exe">
    </ExePackage>
  </PackageGroup>
</Fragment>

然后引用NetFx4FullRedist在你的<chain>..</chain> :

  <!-- .NET runtime full profile -->
  <PackageGroupRef Id="NetFx4FullRedist"/>

我使用了它的一个变体,将 .NET 4 客户端可重新分发到我的刻录生成的安装程序应用程序中,没有任何问题。

关于wix - 在我的刻录 Bootstrap 中打包 .Net 可再发行组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30186697/

相关文章:

wix - 如何使用 Wix 进行 x86 编译安装在 System 32 文件夹上

VSTS 和 WIX 上的 MSBuildExtensionsPath

installation - WIX XmlConfig 操作未在补丁回滚时运行

wix - 烧录:访问 Bootstrapper.exe 中的 msi 文件

Wix 'specified account already exists' 修复

wix - `-arch` 命令行上的 `candle` 参数究竟是做什么的?

wix - 如何使 WiX Toolset (Burn) Bootstrapper 识别升级?

wix - 强制 WiX Burn Bootstrap 允许 MSI 文件使用 REINSTALLMODE=amus

c# - 如何在卸载时通过 Wix 删除生成的文件夹和文件?

visual-studio-2013 - WIX 安装程序 - 无法更改平台并将其保存为 64 位