问题 如何使用WiX捆绑包安装.NET 4.5?


我需要包括微软 。净 4.5作为我的安装包的先决条件,我希望它尽可能自动化。但是,.NET应该  在取消行动时被移除。我想我已经阅读了关于如何使用的一切 DetectCondition 和/或 InstallCondition,但我仍然没有做对;它要么总是运行.NET安装,要么永远不运行它。

这是我最新的设置:

<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'>

  <!-- Define minimum .NET Framework version -->
  <?define NetFx45MinRelease = 377811?>
  ...
    <Chain>
      <PackageGroupRef Id="Netfx45FullPackage"/>
      ...
    </Chain>

    <PackageGroup Id="Netfx45FullPackage">
      <ExePackage Id="Netfx45Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
                  SourceFile="..\..\..\..\Environment\InstallerResources\Prerequisites\dotnetfx45_full_x86_x64.exe"
                  InstallCommand="/passive /norestart"
                  DetectCondition="NETFRAMEWORK45 &gt;= $(var.NetFx45MinRelease)"
                  InstallCondition="NOT REMOVE AND (NETFRAMEWORK45 &lt; $(var.NetFx45MinRelease))" />
    </PackageGroup>

(出于某种原因,我必须定义 NetFx45MinRelease 我自己即使它应该包含在WixNetFxExtension中。)

如何正确设置?


8912
2017-11-22 13:23


起源

?define指令是每个文件。所以你应该把它包含在每个使用它的文件中。这就是你被迫重新宣布它的原因。 - Oleksandr Pshenychnyy
好的,谢谢你的澄清。 - Torbjörn Bergstedt


答案:


我不太确定你为什么遇到问题,但我只是有同样的任务,而且(现在;-)按预期工作。也就是说,它安装 。净 4.5仅在需要时,并且在卸载整个引导程序时不会执行.NET卸载。

但是,.NET 4.5 能够 单独卸载,我觉得这很好。

这是我使用的(很可能源自其他Stack Overflow帖子):

<PackageGroup Id="Netfx45Xxx">
    <ExePackage Id="Netfx45Xxx" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
        SourceFile="C:\wixtest\dotnetfx45_full_x86_x64.exe"
        DetectCondition="(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))"
        InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))"/>
</PackageGroup>

奇怪的是你已经拥有了Permanent =“yes”,这确实是保持.NET卸载的关键。

一个区别是我在InstallCondition中没有明确的“NOT REMOVE”,也许这对Windows Installer来说更有帮助...?

我使用的是WiX 3.7.1224.0,目前是最新版本。


对TheESJ答案的一个评论:即使使用预定义的PackageGroupRef,您也可以提供本地文件以避免下载。只需将它放在引导程序EXE文件下面的“redist”文件夹中,如果存在,它将从那里取下而不下载。在安装错误后,我昨天通过日志文件发现了这种行为。


9
2018-01-15 15:43



谢谢!我实际上使用类似的(现在工作:)设置,我想我会调整我的 InstallCondition使用您的设置。 - Torbjörn Bergstedt
<PackageGroup>的上下文是什么?它是什么文件?它是否包含在<Bundle>标签或其他内容中?这个东西的WiX文档很差,这个答案并没有描绘出整个画面。 - Stealth Rabbi
很高兴看到这个如何一起工作的整个例子。 - C Johnson


您不需要定义PackageGroup。这包含在WixNetFxExtension中。看到 http://wix.sourceforge.net/manual-wix3/install_dotnet.htm。您需要做的就是在wixproj中包含对WixNetFxExtension的引用,然后将PackageGroupRef添加到此处记录的PackageGroup之一: http://wix.sourceforge.net/manual-wix3/wixnetfxextension.htm 到你的连锁店。


5
2017-11-26 18:14



我知道这个选项,我们这样做的原因是完全控制安装的内容并允许在没有互联网访问权限的机器上安装。 - Torbjörn Bergstedt
总是更好地展示如何,而不是告诉做什么......我们中的一些人对Wix很新(就像只有几个小时的经验)。 - C Johnson