使用WiX检测.NET Framework 4.5.1

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

要做到这一点,我想使用WixNetFxExtension lib中的一些属性,这些属性对于旧版本的.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)"

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

    <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的计算机上返回了错误消息。 所以我创建了这样的条件,所以我只能看到从注册表返回的版本号:

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

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

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

这里是修正包括PhilDW建议的散列符号:

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

你在比较中包括#,这不会有帮助。 你有没有尝试在你的CDATA比较中包含#号?

我假设,当微软发布代码示例来检测框架版本时,它不能在MSI文件中使用简单的RegistrySearch来完成。

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

链接地址: http://www.djcxy.com/p/77735.html

上一篇: Detect .NET Framework 4.5.1 using WiX

下一篇: Year in moment JS defaults to 1900 instead of 2000?