Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix:系统找不到文件';SourceDir';_Wix_Windows Installer_Wix3.11 - Fatal编程技术网

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

Wix:系统找不到文件';SourceDir';,wix,windows-installer,wix3.11,Wix,Windows Installer,Wix3.11,我被诅咒使用wix和wixtoolset3.11构建一个设置。是的,这是地狱。使用此工具集做简单的事情和阅读手册需要花费大量的时间和金钱 我的目标:安装程序应该下载并安装.NETFramework 4.5。声明如下: <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microso

我被诅咒使用wix和wixtoolset3.11构建一个设置。是的,这是地狱。使用此工具集做简单的事情和阅读手册需要花费大量的时间和金钱

我的目标:安装程序应该下载并安装.NETFramework 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安装程序嵌入到我的安装程序中,但出于任何原因,都需要一个属性“Name”或“SourcePath”。我使用属性“SourcePath”或“Name”,这两个声明都需要指向现有文件的路径。是的,当然是这样。那是Wix

当我对路径使用“SourceFile”时,Visual Studio中的编译器会成功运行,但在未安装DotNet Framework 4.5的目标系统上,什么也不会发生。不会安装任何框架。好的,然后我尝试使用属性“Name”,并传递值“Framework\dotNetFx45\u Full\u setup.exe”。编译安装程序时,出现以下错误:

系统找不到文件“SourceDir\Framework\dotNetFx45\u Full\u setup.exe”

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


如何解决与错误的“SourceDir”有关的问题?

您应该用PackageGroupRef元素替换PackageGroup元素

您需要添加对NetFxExtension(WixNetFxExtension.dll)的引用,因为该扩展在生成时提供此定义。您可以在Visual Studio/Voctive中通过添加对项目的引用或将其添加到light.exe调用来完成此操作。见:



仅替换PackageGroup元素不起作用,因为PackageGroup元素是PackageGroup的子元素。正如您在我声明的第4行中所看到的,wixnetfx扩展已经被使用。从PackageGroupRef到“NetFx45Web”的引用不会触发任何下载。这个答案是错的。答案不是错的,你只是不明白而已。我添加了一个代码片段来向您展示一个工作示例。我已将您的剪贴添加到我的项目中,当我在目标系统上执行msi设置时,不会发生任何事情。安装程序仍然没有下载.NET Framework。当你说“msi安装程序”是什么意思时?你运行的是.exe还是.msi?你是否记录了它并读取了日志文件?所以这可能是你误解的根源。MSI无法安装.NET framework。您必须创建一个“引导程序”(.EXE)。EXE首先运行,安装.net framework,然后安装MSI。
<?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>