3

我该死的使用 wix 和 wixtoolset 3.11 构建设置。是的,它是地狱。使用此工具集做简单的事情并阅读手册会消耗大量时间和金钱。

我的目标:安装程序应该下载并安装 .NET Framework 4.5。这是声明:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
       xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
  <?include ApplicationData.wxi?>
    <Fragment>
      <WixVariable Id="NetFx45WebInstallCondition" Value="" Overridable="yes" />

      <!-- install dotnet framework -->
      <!-- https://stackoverflow.com/questions/42720958/web-download-of-vcruntime140-with-wix-burn/42726779 -->
        <PackageGroup Id="NetFx45Web">
        <ExePackage
          InstallCommand="/q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx45FullLog].html&quot;"
          RepairCommand="/q /norestart /repair /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx45FullLog].html&quot;"
          UninstallCommand="/uninstall /q /norestart /ChainingPackage &quot;[WixBundleName]&quot; /log &quot;[NetFx45FullLog].html&quot;"
          PerMachine="yes"
          Id="NetFx45Web"
          Cache="yes"
          Permanent="yes"
          Vital="yes"
          Protocol="netfx4"
          DownloadUrl="https://www.microsoft.com/de-ch/download/confirmation.aspx?id=30653"
          DetectCondition="false"
          Compressed="no"
          InstallCondition="!(wix.NetFx45WebInstallCondition)"
          Name="Framework\dotNetFx45_Full_setup.exe"
          />
      </PackageGroup>
  </Fragment>
</Wix>

我不想将任何 .NET Framework 安装程序嵌入到我的设置中,但无论出于何种原因,都需要属性“名称”或“源路径”之一。我使用属性“SourcePath”或“Name”,这两个声明都需要一个现有文件的路径。是的,当然,这是真的。那是维克斯。

当我对路径使用“SourceFile”时,Visual Studio 中的编译器运行成功,但在未安装 DotNet Framework 4.5 的目标系统上,没有任何反应。不会安装任何框架。好的,然后我尝试使用属性“名称”并传递值“Framework\dotNetFx45_Full_setup.exe”。编译设置时,我收到以下错误:

系统找不到文件“SourceDir\Framework\dotNetFx45_Full_setup.exe”

嗯...什么是SourceDir,为什么我需要删除一个路径,或者我希望安装程序下载文件?很多问题,但让我们从第一个开始:

如何解决有关神秘的“SourceDir”的问题?

4

1 回答 1

2

您应该将 PackageGroup 元素替换为 PackageGroupRef 元素。

http://wixtoolset.org/documentation/manual/v3/xsd/wix/packagegroupref.html

您需要添加对 NetFxExtension (WixNetFxExtension.dll) 的引用,因为扩展在构建时提供了此定义。您可以在 Visual Studio / Votive 中通过添加对项目的引用或将其添加到您的 light.exe 调用中来执行此操作。看:

http://wixtoolset.org/documentation/manual/v3/customactions/wixnetfxextension.html

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
  <Bundle Name="ProductName1" Version="1.0.0.0" Manufacturer="ProductName1" UpgradeCode="f6ac65f9-56ca-496c-b04c-b68b37967298">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
      <bal:WixStandardBootstrapperApplication LicenseFile="Resources\EULA.rtf" LogoFile="Resources\Icon.png" />
    </BootstrapperApplicationRef>
    <Chain>
      <PackageGroupRef Id="NetFx45Web"/>
      <MsiPackage Id="ProductName1" SourceFile="$(var.ProductName1Setup.TargetPath)" />
    </Chain>
  </Bundle>
</Wix>
于 2018-04-20T19:44:55.827 回答