【问题标题】:How to check for .net framework 4.7.1 with Wix 3.11如何使用 Wix 3.11 检查 .net framework 4.7.1
【发布时间】:2026-02-11 06:45:01
【问题描述】:

我正在尝试通过条件检查带有 Wix 3.11 的 .net 版本。这在 4.5 之前都可以正常工作,如下所示:

<PropertyRef Id="NETFRAMEWORK45" />
  <Condition Message="This application requires .NET Framework 4.5. Please install the .NET Framework then run this installer again.">
    <![CDATA[Installed OR NETFRAMEWORK45]]>
  </Condition>

检查任何高于 4.5 的东西似乎是不可能的——至少在这种机制下是不可能的。我该怎么做?

【问题讨论】:

    标签: wix wix3


    【解决方案1】:

    那个方法(PropertyRef)是语法糖。 NetFxExtension 预处理器在编译时注入实现。 WiX 目前落后。您正在寻找的实现类似于:

    <PropertyRef Id="NETFRAMEWORK45" />
    <Condition Message="This application requires .NET Framework 4.7.1. Please install the .NET Framework then run this installer again."><![CDATA[Installed OR NETFRAMEWORK45>=#461308]]>
    </Condition>
    

    https://github.com/wixtoolset/issues/issues/5575

    更新 (hot33331):在数字 461308 之前添加了一个 #。否则它对我不起作用。

    【讨论】:

    • 谢谢克里斯托弗!我必须在数字前添加一个# 来比较,但之后它就像一个魅力。奇怪为什么他们会在那里放一个#...
    • 啊,* 过滤掉了我身上的#。 MSI 中的所有属性都是字符串属性,您必须在其前面加上 # 以告诉 MSI 将其视为整数。
    • 请参阅:msdn.microsoft.com/en-us/library/windows/desktop/… 了解 # 的不同变体。
    • 另见:msdn.microsoft.com/en-us/library/windows/desktop/… 基本上,AppSearch/Reglocator 从注册表中读取 DWORD 并将 # 放在上面,因为所有属性都是字符串。
    • 我必须将 #461308 放在双引号中才能在 VS 2017 中编译。就像这样:= "#461308"]]>