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 "[WixBundleName]" /log "[NetFx45FullLog].html""
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx45FullLog].html""
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx45FullLog].html""
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>
我该死的要使用 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 "[WixBundleName]" /log "[NetFx45FullLog].html""
RepairCommand="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx45FullLog].html""
UninstallCommand="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx45FullLog].html""
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>