Wix bootstrapper故障检测.net框架

时间:2015-01-28 17:34:42

标签: .net wix

我正在尝试检测在安装应用程序之前是否在客户端计算机上安装.Net框架。如果我没有包含安装文件,请执行它。

我的chain中有以下代码:

  <ExePackage Id="Net45" Name="Microsoft .NET Framework 4.5.1 Setup" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
    SourceFile="F:\Net Framework Install.exe"
    InstallCondition="NOT(Installed OR NETFRAMEWORK45)" />

我还宣布了以下片段:

  <Fragment Id="InstallConditionChecks">
    <PropertyRef Id="NETFRAMEWORK45"/>
  </Fragment>

最后,我相信我正在引用检测.net安装所需的所有正确的wix库:

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

问题是即使我有一台肯定安装了.Net framework 4.5的测试机器,安装程序仍会尝试安装它(导致.net安装程序尝试修复安装)。

我在这里做错了吗?

2 个答案:

答案 0 :(得分:2)

这里有两个问题。主要问题是PropertyRef适用于MSI,而不是捆绑。您需要使用RegistrySearchRef。另一个问题是您将检测逻辑放在InstallCondition中,但属于DetectCondition。移除InstallCondition并使用与NetFx扩展程序使用的DetectCondition相同的<?define NetFx451MinRelease = 378675 ?> <util:RegistrySearchRef Id="NETFRAMEWORK45" /> <ExePackage DetectCondition="NETFRAMEWORK45 &gt;= $(var.NetFx451MinRelease)" /> https://github.com/wixtoolset/wix3/blob/develop/src/ext/NetFxExtension/wixlib/NetFx451.wxs

{{1}}

答案 1 :(得分:0)

您没有检查目标机器的注册表以查找您正在寻找的目标框架,看看本教程,它将向您展示如何检测Net Framework(RegistrySearch),甚至展示如何使其工作对于Win32或Win64。

教程here