Обнаружение.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

Другие вопросы по тегам