Wix: 系统找不到文件 'SourceDir'

Wix: The system cannot find the file 'SourceDir'

我该死的要使用 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 -->
      <!--  -->
        <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 安装程序,但出于某种原因,属性 'Name' 或 'SourcePath' 之一是必需的。我使用属性 'SourcePath' 或 'Name',这两个声明都需要一个现有文件的路径。是的,当然,那是真的。那是 Wix。

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

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

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

如何解决关于神秘 'SourceDir' 的问题?

您应该将 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>