Обнаружение.NET Framework 4.5.1 с использованием WiX
Я создаю проект установщика в моем решении с использованием WiX 3.8. В рамках этой установки я создаю несколько условий запуска, одним из которых является проверка установки Microsoft .NET Framework 4.5.1.
Чтобы сделать это, я хочу использовать некоторые свойства в библиотеке WixNetFxExtension, которые, кажется, хорошо работают для более старых версий.NET Framework. Пример того, как это сделать, можно найти на 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), выясняется, что для.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>
1 ответ
Вы включаете этот # в сравнение, это не поможет. Вы пытались включить # в сравнение CDATA?
Я предполагаю, что когда люди Microsoft публикуют примеры кода для определения версий платформы, это невозможно сделать с помощью простого RegistrySearch в файле MSI.
http://blogs.msdn.com/b/astebner/archive/2013/10/17/10457758.aspx