C# 使用Wix引导程序(Burn)安装.NET可再发行版本

C# 使用Wix引导程序(Burn)安装.NET可再发行版本,c#,wix,installation,wix-extension,C#,Wix,Installation,Wix Extension,我是Wix/Burn的新手,正在努力理解一些基本原理。我有一个简单的引导程序,它使用以下链安装所需的.net 4.0 framework: <Chain> <PackageGroupRef Id="NetFx40ClientRedist"/> <MsiPackage Id="MyApp" SourceFile="$(var.WixInstaller.TargetPath)" DisplayInternalUI="yes" /> </Cha

我是Wix/Burn的新手,正在努力理解一些基本原理。我有一个简单的引导程序,它使用以下链安装所需的.net 4.0 framework:

<Chain>
    <PackageGroupRef Id="NetFx40ClientRedist"/>
    <MsiPackage Id="MyApp" SourceFile="$(var.WixInstaller.TargetPath)" DisplayInternalUI="yes" />
</Chain>

如建议的那样。 该应用程序可以在没有web访问的服务器上使用,因此从本地可再发行服务器安装.net非常重要。引导程序似乎工作得很好,并按预期安装框架。但是setup.exe文件与应用程序的大小大致相同(<5 MB),因此我必须假设框架在安装过程中仍在下载

问题

  • 那么,WixNetfxExtension包中的“NetFx40ClientWeb”和“netfx40clientrest”之间有什么区别呢

  • 我如何在boostrapper中包含一个本地可再发行文件,这样就不需要下载了

  • 编辑:

    我相信我找到了答案:

    WiXNetFxExtension将检查名为“redist”的子目录,其中 您的捆绑包是为该软件包准备的,如果目前不存在,请下载该软件包 该路径,例如“redist\dotNetFx40\u Client\u setup.exe”。这是标准的 烧伤行为


    两者之间的区别是:
    1.clientWeb-意味着您必须连接到web,并且.net 4.0将被下载,然后安装到计算机上。

    2.clientRedist-意思是可再发行的-意思是一个完整的软件包,不需要任何互联网连接,你可以在任何计算机上安装它


    如果您使用可再发行的软件包,您应该不会有问题-下面是.Net 4.5的示例,它与.Net 4.0相同,只是diff是可再发行的软件包

    <?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:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
      <Bundle Name="Prog" Version="1.0.0.0" Manufacturer="my Corporation" UpgradeCode="*">
        <Chain>
          <!-- TODO: Define the list of chained packages. -->
          <PackageGroupRef Id="Netfx45FullPackage" />
        </Chain>
      </Bundle>
      <Fragment>
        <PackageGroup Id="Netfx45FullPackage">
          <ExePackage Id="Netfx45Xxx" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" SourceFile="..\SetupProject\dotnetfx45_full_x86_x64.exe" DetectCondition="(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))" InstallCondition="(VersionNT &gt;= v6.0 OR VersionNT64 &gt;= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))" />
    
          <MsiPackage Id="MyProg" Cache="no" Compressed="no" DisplayInternalUI="yes" Vital="yes" SourceFile="$(var.installerPath)\MyProgCore.msi" />
        </PackageGroup>
      </Fragment>
    </Wix>
    
    
    
    您是如何让burn将redist文件夹复制到安装程序的本地计算机的?我是通过在NetFx40Redist的源代码中的“ExePackage”定义中添加“SourceFile”属性来实现的,但我仍然想知道如何在不攻击源代码的情况下进行此操作。如果安装了更高版本的.Net,我们如何检测并跳过安装?DetectCondition=“(Netfx4FullVersion=“4.5.50709”)和(而不是VersionNT64或(Netfx4x64FullVersion=“4.5.50709”)“是的,我正在使用此条件。但是,在安装了4.6的系统中,burn会尝试启动安装程序。然后我必须从.Net安装程序UI手动退出.Net安装程序。