Обнаружение.NET 4.5.1 и будущих обратно совместимых выпусков
В соответствии с руководством, изложенным в статье MSDN Как: определить, какие версии.NET Framework установлены, я написал программу установки WiX, чтобы проверить HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Release
ключ реестра, чтобы определить, что установлен.NET 4.5.1, и использовать это обнаружение для установки необходимого условия.
Проблема, с которой я столкнулся сейчас, заключается в том, что при установке.NET 4.5.2 тот же ключ больше не используется. 378675
или же 378758
, но сейчас 379893
, Предполагается, что.NET 4.5.2 является "высокосовместимым обновлением на месте", однако рекомендуемый алгоритм проверки версий не имеет обратной совместимости.
Проверки для предыдущих версий не имели этой проблемы, ключи реестра 2.0, 3.0 и 3.5 все еще присутствуют, даже если установлена более поздняя версия. например HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Version
все еще присутствует, даже если установлен 3.5.
Ранее рекомендованный Microsoft метод определения версий был совместим с предыдущими версиями, но это больше не относится к 4.5 / 4.5.1 / 4.5.2. Что тогда я должен делать вместо этого? Я не хочу просто добавить 379893
(.NET 4.5.2) к набору значений реестра, которые я проверяю, так как это, вероятно, завершится неудачей, когда (если) .NET 4.5.3 (или другой) будет выпущен. Может быть, я мог бы проверить HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Version
для>= 4.5.51641, но это не рекомендуемый подход в соответствии с MSDN, и что произойдет, если они выпустят, скажем, 4.6, который почему-то не имеет обратной совместимости?
2 ответа
Проверьте значение ключевого слова Release, чтобы определить установленную версию. Для обеспечения прямой совместимости вы можете проверить значение, большее или равное значениям, перечисленным в таблице.
Это было чуть ниже того места, куда указывал ссылка MSDN в исходном вопросе (спасибо, что приблизили меня).
В моем файле.wxs у меня есть код, который, кажется, работает, не с допустимым сообщением в слишком низкой версии.Net 4.5.
Поместите следующую ссылку и условие свойства в
<!-- Must have at least .Net 4.5.2 which has release 379893 -->
<PropertyRef Id="NETFRAMEWORK45RELEASE"/>
<Condition Message="$(var.ProductName) requires .NET Framwork 4.5.2. Please install the .NET Framwork then run this installer again.">
Installed OR ( NETFRAMEWORK45RELEASE AND NETFRAMEWORK45RELEASE >= "#379893" )
</Condition>
Со следующим фрагментом, объявленным в другом месте:
<Fragment>
<Property Id="NETFRAMEWORK45RELEASE">
<RegistrySearch Id="NetFramework452Release"
Root="HKLM"
Key="Software\Microsoft\NET Framework Setup\NDP\v4\Full"
Name="Release"
Type="raw" />
</Property>
</Fragment>
Я не уверен, почему вы будете беспокоиться о том, что будущая версия не будет иметь обратной совместимости, они все были так далеко, и нет никаких оснований полагать, что это изменится. Вы создаете свой установщик сегодня, а не всякий раз, когда выпускается 4.6, поэтому, даже если бы вы могли это обнаружить, что именно вы бы сделали? Отказаться от установки, пока она, скорее всего, будет совместима? Не нужно ничего обнаруживать, кроме как убедиться, что установлена версия.net [по крайней мере, на что вы нацелены].
Также, если вы действительно беспокоитесь о будущей крупной версии, нарушающей совместимость, вы можете встроить установщик для версии.net, на которую вы нацелены, если это произойдет, тогда ваше приложение будет установлено, например, на Windows 9 / .net 6 позже, и это произойдет. чтобы не быть на месте обновлений, установщик установил бы предыдущую версию рядом друг с другом, и, когда несколько версий.net установлены рядом, будет использоваться та, которая соответствует вашим требованиям.