使用WiX检测.NET Framework 4.5.1

我正在使用WiX 3.8在我的解决scheme中创build一个安装程序项目。 作为此安装的一部分,我创build了一些启动条件,其中之一是检查是否安装了Microsoft .NET Framework 4.5.1。

要做到这一点,我想使用WixNetFxExtension库中的一些属性,似乎适用于较旧版本的.NET框架。 有一个如何在http://wixtoolset.org/documentation/manual/v3/howtos/redistributables_and_install_checks/check_for_dotnet.html上这样做的例子。这不适用于.NET 4.5.1,但是因为没有NETFRAMEWORK451属性检查。

查看NetFx451.wxs模块的源代码( http://wix.codeplex.com/SourceControl/latest#src/ext/NetFxExtension/wixlib/NetFx451.wxs ),似乎没有单独的属性可用于.NET 4.5.1,而是它也使用相同的NETFRAMEWORK45。 据我所知,v4.5.1是v4.5的就地升级,所以它使用相同的registry键(我认为)。 无论如何,在这个模块中,他们只需检查从NETFRAMEWORK45返回的版本号如下:

DetectCondition="NETFRAMEWORK45 >= $(var.NetFx451MinRelease)" 

所以我认为我可以写下如下的条件:

  <PropertyRef Id="NETFRAMEWORK45" /> <Condition Message="The .NET Framework 4.5.1 was not found. Stopping installation."> <![CDATA[Installed OR (NETFRAMEWORK45 >= 378675)]]> </Condition> 

但是,这在我知道安装了.NET Framework 4.5.1的计算机上返回了错误消息。 所以我创build了这样的条件,所以我只能看到从registry中返回的版本号:

  <PropertyRef Id="NETFRAMEWORK45" /> <Condition Message ="[NETFRAMEWORK45]">0</Condition> 

这将显示一个消息框,其中包含以下文本:#378758所以我知道registry中的值是正确的。

所以我有点困惑为什么我的情况失败了。 有没有什么明显的我在这里失踪,还是有其他的方式来比较条件元素中的值?

这里是修复包括由PhilDWbuild议的哈希符号:

  <PropertyRef Id="NETFRAMEWORK45" /> <Condition Message="The .NET Framework 4.5.1 was not found. Stopping installation."> <![CDATA[Installed OR (NETFRAMEWORK45 >= "#378675")]]> </Condition> 

Solutions Collecting From Web of "使用WiX检测.NET Framework 4.5.1"