Аналогичный вопрос был задан здесь , но он был специфичен для .NET 3.5. В частности, я ищу следующее:
- Как правильно определить, какие версии .NET Framework и пакеты обновления установлены?
- Есть ли список ключей реестра, которые можно использовать?
- Есть ли зависимости между версиями Framework?
.net
installation
version-detection
Скотт Дорман
источник
источник
Ответы:
Реестр является официальным способом определить, установлена ли конкретная версия Framework.
Какие разделы реестра необходимы, меняются в зависимости от версии Framework, которую вы ищете:
Как правило, вы ищете:
за исключением .NET 1.0, где значением является строка (
REG_SZ
), а не число (REG_DWORD
).Определение уровня пакета обновления происходит по аналогичной схеме:
Как видите, определение уровня SP для .NET 1.0 изменяется, если вы работаете в Windows Media Center или Windows XP Tablet Edition. Опять же, .NET 1.0 использует строковое значение, в то время как все остальные используют DWORD.
Для .NET 1.0 строковое значение в любом из этих ключей имеет формат #, #, ####, #. Последний # - это уровень пакета обновления.
Хотя я явно не просил об этом, если вы хотите узнать точный номер версии Framework, вы бы использовали следующие ключи реестра:
Опять же, .NET 1.0 использует строковое значение, в то время как все остальные используют DWORD.
Дополнительные замечания
для .NET 1.0 строковое значение в любом из этих ключей имеет формат
#,#,####,#
.#,#,####
Часть строки является Framework версии.для .NET 1.1 мы используем имя самого раздела реестра, который представляет номер версии.
Наконец, если вы посмотрите на зависимости, .NET 3.0 добавляет дополнительные функции в .NET 2.0, поэтому и .NET 2.0, и .NET 3.0 должны быть оценены как установленные, чтобы правильно сказать, что .NET 3.0 установлен. Аналогично, .NET 3.5 добавляет дополнительные функциональные возможности в .NET 2.0 и .NET 3.0, поэтому .NET 2.0, .NET 3.0 и .NET 3. все должны оценить, что установлены, чтобы правильно сказать, что .NET 3.5 установлен.
.NET 4.0 устанавливает новую версию CLR (CLR версии 4.0), которая может работать параллельно с CLR 2.0.
Обновление для .NET 4.5
В
v4.5
реестре не будет ключа, если установлен .NET 4.5. Вместо этого вы должны проверить,HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full
содержит ли ключ значение с именемRelease
. Если это значение присутствует, устанавливается .NET 4.5, в противном случае это не так. Более подробную информацию можно найти здесь и здесь .источник
Официальный ответ Microsoft на этот вопрос есть в следующей статье базы знаний:
Идентификатор статьи: 318785 - Последняя проверка: 7 ноября 2008 г. - Редакция: 20.1 Как определить, какие версии .NET Framework установлены и были ли установлены пакеты обновления
К сожалению, это не похоже на работу, потому что версия mscorlib.dll в каталоге 2.0 имеет версию 2.0, а версия mscorlib.dll отсутствует в каталогах 3.0 или 3.5, даже если установлен 3.5 SP1 ... почему будет ли официальный ответ Microsoft так дезинформирован?
источник
Бета-версия Framework 4 устанавливается в другой раздел реестра.
источник
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP", true)
чтобыRegistry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP")
избежать исключения безопасности для пользователей без прав администратора.Я хотел обнаружить наличие .NET версии 4.5.2, установленной в моей системе, и не нашел лучшего решения, чем ASoft .NET Version Detector .
Снимок этого инструмента, показывающий разные версии .NET:
источник
Перечислите подключи
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
. Каждый подраздел является версией .NET . Он должен иметьInstall=1
значение, если оно присутствует на компьютере, значение SP, которое показывает пакет обновления, иMSI=1
значение, если оно было установлено с использованием MSI. (.NET 2.0 в Windows Vista, к примеру, не имеет последнего, поскольку является частью ОС.)источник
Для 64-битной ОС путь будет следующим:
источник
Wow6432Node
реестра является частью отражателя реестра WOW64, который отражает определенные ключи и значения между 64-разрядным и 32-разрядным представлениями реестра. Нет необходимости напрямую обращаться к этому ключу, поскольку реестр автоматически обрабатывает перенаправление и зеркалирование.Обновление для .NET 4.5.1
Теперь, когда доступна .NET 4.5.1, необходимо проверить фактическое значение ключа с именем Release в реестре, а не только его существование. Значение 378758 означает, что установлен .NET Framework 4.5.1. Однако, как описано здесь, это значение составляет 378675 в Windows 8.1.
источник
Доступен графический инструмент ASoft .NET Version Detector , который всегда был очень надежным. Он может создавать файлы XML, указав имя файла вывода XML в командной строке.
Вы можете использовать это для автоматизации. Это крошечная программа, написанная на языке, не зависящем от .NET, и не требует установки.
источник
Мне нужно было выяснить, какая версия .NET Framework у меня была на моем компьютере, и все, что я сделал, - это зашел на панель управления и выбрал опцию «Удалить программу». После этого я отсортировал программы по имени и обнаружил Microsoft .NET Framework 4 Client Profile.
источник
Вот скрипт PowerShell для получения установленных версий .NET Framework
Он был написан на основе Как: определить, какие версии .NET Framework установлены . Пожалуйста, используйте функцию Get-FrameworkVersion (), чтобы получить информацию об установленных версиях .NET Framework.
источник
Используя библиотеку Signum.Utilities от SignumFramework (которую вы можете использовать автономно), вы можете получить ее красиво и без работы с реестром самостоятельно:
источник
См. Как определить, какие версии .NET Framework установлены (MSDN).
MSDN предлагает один пример функции, который, кажется, делает работу для версии 1-4. Согласно статье, выход метода:
Обратите внимание, что для «версии 4.5 и выше» есть другая функция.
источник
В Windows 7 (она должна работать и для Windows 8, но я ее не тестировал):
Перейти к командной строке
Шаги для перехода в командную строку:
В cmd введите эту команду
Это дает последнюю установленную версию NET Framework.
Можно также попробовать Raymond.cc Utilties за то же самое.
источник
cmd
дает мнеERROR: Description = Invalid namespace
.ERROR: Description = Invalid namespace