使用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/edistributables_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比较中的#?
我会假设当Microsoft人员后代码示例检测框架版本,它无法在MSI文件中使用简单的注册表搜索完成。
http://blogs.msdn.com/B / Astebner / Archive / 2013/10 / 17/10457758.aspx
不隶属于 StackOverflow