我正在使用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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top