使用WiX检测.NET Framework 4.5.1

Ave*_*ery 7 .net windows installer wix

我正在使用WiX 3.8在我的解决方案中创建一个安装程序项目.作为此安装的一部分,我创建了一些启动条件,其中一个是检查是否已安装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的就地升级,因此它使用相同的注册表项(我认为).无论如何,在该模块中,他们只需检查从NETFRAMEWORK45返回的版本号,如下所示:

DetectCondition="NETFRAMEWORK45 >= $(var.NetFx451MinRelease)"
Run Code Online (Sandbox Code Playgroud)

所以我假设我可以写出如下条件:

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

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

    <PropertyRef Id="NETFRAMEWORK45" />
    <Condition Message ="[NETFRAMEWORK45]">0</Condition>
Run Code Online (Sandbox Code Playgroud)

这会显示一个带有以下文本的消息框:#378758所以我知道注册表中的值是正确的.

所以我有点困惑为什么我的病情失败了.有没有明显的东西我在这里缺少,还是有其他方法来比较条件元素中的值?

以下是包含PhilDW建议的哈希符号的修复:

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

Phi*_*lDW 4

你在比较中包含了#,这没有帮助。您是否尝试过在 CDATA 比较中包含 # ?

我认为,当 Microsoft 人们发布代码示例来检测框架版本时,无法通过 MSI 文件中的简单RegistrySearch 来完成。

http://blogs.msdn.com/b/astebner/archive/2013/10/17/10457758.aspx