如何在我的离线功能Wix刻录软件包中包含.net可再发行组件安装

时间:2014-09-19 18:46:27

标签: wix

我是Wix的新手。我创建了一个Wix bootstrapper项目。我打算使用从注册表搜索定义的变量来检查我的.net可再发行安装是否应该运行。但是,从这个来源我看到了如何包含不同.net安装bundling .net

的链接

但这对于支持脱机的安装程序不起作用,如文章中所述。

有没有办法将我的.net安装捆绑到我的刻录包中,仍然使用这样的东西来运行.net安装?同样,我是wix的新手,我认为PackageGroupRef在这里工作的方式是仅在需要时运行此版本的.net的安装。

示例:

<?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:util="http://schemas.microsoft.com/wix/UtilExtension"
     xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension" >


<Bundle ...>
   <Chain>
      <PackageGroupRef Id="NetFx451Redist" />
      <MsiPackage ... />
  </Chain>
</Bundle>
</Wix>

以下是我使用的内容,它安装在win 7上并安装.net 4.5.1,删除我的安装后重新安装不会调用.net 4.5.1安装。

使用Ricks示例,我这样做了。但是我必须包含NetFx451MinRelease的定义。我缺少一些东西,但现在它正在发挥作用。谢谢里克。

<?define NetFx451MinRelease = 378675 ?>
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>

    <Chain>

  <ExePackage Id="Netfx451Full"
                DisplayName="Microsoft .NET Framework 4.5.1"
                SourceFile="..\..\Requirements\NDP451-KB2858728-x86-x64-AllOS-ENU.exe"
                InstallCommand="/passive /norestart"
                Permanent="yes"
                Vital="yes"
                Compressed="yes"
                DetectCondition="NETFRAMEWORK45 &gt;= $(var.NetFx451MinRelease)" />


    </Chain>

3 个答案:

答案 0 :(得分:1)

看看这里,What is the difference between NetFx45WebLink and NetFx45RedistLink

我们所做的(针对.Net 4.0)是复制和修改源代码,特别是将SourceFile属性设置为包含已下载的可再发行的.Net安装程序的路径。

.Net 4.0示例

<Fragment>
  <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4FullVersion" />
  <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4x64FullVersion" Win64="yes" />

<PackageGroup Id="Netfx4Full">
  <ExePackage Id="Netfx4Full"
              DisplayName="Microsoft .NET Framework 4.0"
              SourceFile="..\redist\dotNetFx40_Full_x86_x64.exe"
              InstallCommand="/passive /norestart"
              Permanent="yes"
              Vital="yes"
              Compressed="yes"
              DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" />
</PackageGroup>
</Fragment>

答案 1 :(得分:0)

将.NET offline / standalone安装程序添加到安装程序并使用静默安装开关进行安装。

查看http://unattended.sourceforge.net/installers.php了解详情。可能是wix特有的信息,但应该有所帮助。

这个答案 - https://stackoverflow.com/a/2899673/1678053 - 是另一种方式。

更新:
我认为这就是你要找的东西:https://stackoverflow.com/a/14341308/1678053

答案 2 :(得分:0)

小心使用 /被动开关。

<Fragment>
<WixVariable Id="WixMbaPrereqPackageId" Value="Netfx451Full" />
<WixVariable Id="WixMbaPrereqLicenseUrl" Value="$(var.NetFx40EulaLink)" />

<util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version"
                     Variable="Net4FullVersion" />
<util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version"
                     Variable="Net4x64FullVersion" Win64="yes" />

<PackageGroup Id="Netfx451Full">
  <ExePackage Id="Net45" Name="Microsoft .NET Framework 4.5.1.exe"
              Description="Microsoft .NET Framework 4.5.1 AllOS (x86 and x64) Setup"
              Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes"
              InstallCommand="/norestart"
              SourceFile="$(var.PreRequisites_x86)DotNetFramework\NDP451-KB2858728-x86-x64-AllOS-ENU.exe"
              DetectCondition="(Net4FullVersion = &quot;4.5.50938&quot;) AND (NOT VersionNT64 OR (Net4x64FullVersion = &quot;4.5.50938&quot;))"
              InstallCondition="(VersionNT >= v6.1 OR VersionNT64 >= v6.1) AND (NOT (Net4FullVersion = &quot;4.5.50938&quot; OR Net4x64FullVersion = &quot;4.5.50938&quot;))" />
</PackageGroup>