我正在使用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>
答案 0 :(得分:4)
你在比较中包含了那个#,这对你没有帮助。您是否尝试在您的CDATA比较中包含#?
我认为当微软人发布代码示例来检测框架版本时,无法通过MSI文件中的简单RegistrySearch来完成。
http://blogs.msdn.com/b/astebner/archive/2013/10/17/10457758.aspx