Как проверить наличие .net framework 4.7.1 с помощью Wix 3.11

Я пытаюсь проверить версию .net с помощью Wix 3.11 через Condition. Это прекрасно работает до версии 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 кажется невозможной - по крайней мере, с этим механизмом. Как я могу это сделать?


person hot33331    schedule 11.04.2018    source источник


Ответы (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 добавлен #. Без этого у меня не работало.

person Christopher Painter    schedule 11.04.2018
comment
Спасибо, Кристофер! Мне пришлось добавить # перед числом для сравнения, но после этого все заработало как шарм. Странно, почему они поставили # там ... - person hot33331; 13.04.2018
comment
Ах, StackOverflow отфильтровал # на меня. Все свойства в MSI являются строковыми, и вы должны поставить перед ними знак #, чтобы MSI рассматривал их как целое число. - person Christopher Painter; 13.04.2018
comment
См.: msdn.microsoft.com / en-us / library / windows / desktop / для разных вариантов #. - person Christopher Painter; 13.04.2018
comment
См. Также: msdn.microsoft. com / en-us / library / windows / desktop / Обычно AppSearch / Reglocator считывает DWORD из реестра и помещает в него #, поскольку все свойства являются строками. - person Christopher Painter; 13.04.2018
comment
Для компиляции в VS 2017 мне пришлось заключить # 461308 в двойные кавычки. Примерно так: ‹! [CDATA [Установлено ИЛИ NETFRAMEWORK45› = # 461308]] › - person Trevor; 25.08.2018