Как я могу обнаружить what.NET установлены версии платформы и пакеты обновления?
здесь был задан аналогичный вопрос, но он был специфичен для .NET 3.5. В частности, я ищу следующее:
- что такое правильный способ, чтобы определить, какие .Установлен NET Framework версий и пакетов обновления?
- есть ли список разделов реестра, которые можно использовать?
- существуют ли какие-либо зависимости между версиями фреймворка?
13 ответов:
реестр официальный способ чтобы определить, установлена ли определенная версия фреймворка.
какие разделы реестра необходимо изменить в зависимости от версии фреймворка, которую вы ищете:
Framework Version Registry Key ------------------------------------------------------------------------------------------ 1.0 HKLM\Software\Microsoft\.NETFramework\Policy\v1.005 1.1 HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\Install 2.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Install 3.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup\InstallSuccess 3.5 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Install 4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Install 4.0 Full Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Installкак правило, вы ищете:
"Install"=dword:00000001за исключением .NET 1.0, где значение является строкой (
REG_SZ) вместо числа (REG_DWORD).определение пакета обновления уровень следует аналогичной схеме:
Framework Version Registry Key ------------------------------------------------------------------------------------------ 1.0 HKLM\Software\Microsoft\Active Setup\Installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 1.0[1] HKLM\Software\Microsoft\Active Setup\Installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Version 1.1 HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322\SP 2.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\SP 3.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\SP 3.5 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\SP 4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client\Servicing 4.0 Full Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full\Servicing [1] Windows Media Center or Windows XP Tablet Editionкак вы можете видеть, определение уровня SP для .NET 1.0 изменяется, если вы работаете в Windows Media Center или Windows XP Tablet Edition. Опять же, .NET 1.0 использует строковое значение, а все остальные используют DWORD.
для .NET 1.0 строковое значение в любом из этих ключей имеет формат #,#,####,#. Последний # - это уровень пакета обновления.
хотя я явно не просил об этом, если вы хотите знать точное номер версии фреймворка вы бы использовали следующие разделы реестра:
Framework Version Registry Key ------------------------------------------------------------------------------------------ 1.0 HKLM\Software\Microsoft\Active Setup\Installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}\Version 1.0[1] HKLM\Software\Microsoft\Active Setup\Installed Components\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\Version 1.1 HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322 2.0[2] HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Version 2.0[3] HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727\Increment 3.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Version 3.5 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5\Version 4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version 4.0 Full Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Version [1] Windows Media Center or Windows XP Tablet Edition [2] .NET 2.0 SP1 [3] .NET 2.0 Original Release (RTM)опять же, .NET 1.0 использует строковое значение, а все остальные используют DWORD.
Дополнительная Информация
для .NET 1.0 строковое значение в любом из этих ключей имеет формат
#,#,####,#. Элемент#,#,####часть строки-это версия платформы.для .NET 1.1 мы используем имя самого раздела реестра, который представляет собой номер версии.
наконец, если вы посмотрите на зависимости, .NET 3.0 добавляет дополнительную функциональность в .NET 2.0, поэтому как .NET 2.0, так и .NET 3.0 должны быть установлены как установленные, чтобы правильно сказать, что .NET 3.0 установлен. Аналогично .Net 3.5 с добавляет дополнительную функциональность .Net 2.0 и .Объем 3.0, так .Объем 2.0, .Чистая 3.0, а также .Чистая 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 на этот вопрос в следующей статье базы знаний:
к сожалению, это не работает, потому что mscorlib.версия dll в каталоге 2.0 имеет версию 2.0, и нет mscorlib.версия dll в любом каталоги 3.0 или 3.5, даже если установлен 3.5 SP1 ... почему официальный ответ Microsoft будет настолько дезинформирован?
бета-версия Framework 4 устанавливается в другой раздел реестра.
using System; using System.Collections.ObjectModel; using Microsoft.Win32; class Program { static void Main(string[] args) { foreach(Version ver in InstalledDotNetVersions()) Console.WriteLine(ver); Console.ReadKey(); } public static Collection<Version> InstalledDotNetVersions() { Collection<Version> versions = new Collection<Version>(); RegistryKey NDPKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP"); if (NDPKey != null) { string[] subkeys = NDPKey.GetSubKeyNames(); foreach (string subkey in subkeys) { GetDotNetVersion(NDPKey.OpenSubKey(subkey), subkey, versions); GetDotNetVersion(NDPKey.OpenSubKey(subkey).OpenSubKey("Client"), subkey, versions); GetDotNetVersion(NDPKey.OpenSubKey(subkey).OpenSubKey("Full"), subkey, versions); } } return versions; } private static void GetDotNetVersion(RegistryKey parentKey, string subVersionName, Collection<Version> versions) { if (parentKey != null) { string installed = Convert.ToString(parentKey.GetValue("Install")); if (installed == "1") { string version = Convert.ToString(parentKey.GetValue("Version")); if (string.IsNullOrEmpty(version)) { if (subVersionName.StartsWith("v")) version = subVersionName.Substring(1); else version = subVersionName; } Version ver = new Version(version); if (!versions.Contains(ver)) versions.Add(ver); } } } }
перечисление подразделов
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP. Каждый подраздел является.NET версия. Он должен былInstall=1значение если оно присутствует на машине, значение SP, которое показывает пакет обновления иMSI=1значение, если он был установлен с помощью MSI-файла. (Например, .NET 2.0 в Windows Vista не имеет последнего, поскольку он является частью ОС.)
Я хотел обнаружить наличие .NET версии 4.5.2, установленной в моей системе, и я не нашел лучшего решения, чем ASoft .NET Version Detector.
снимок этого инструмента, показывающий различные версии .NET:
для 64-разрядной ОС путь будет:
HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\
обновление для .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 в командной строке.
вы можете использовать это для автоматизации. Это крошечная программа, написанная в виде non-.NET зависимый язык и не требует установки.
Мне нужно было узнать, какая версия .NET framework у меня была на моем компьютере, и все, что я сделал, это перейти на панель управления и выбрать опцию "Удалить программу". После этого я отсортировал программы по имени и нашел профиль клиента Microsoft .NET Framework 4.
вот сценарий PowerShell для получения установленных версий .NET framework
function Get-KeyPropertyValue($key, $property) { if($key.Property -contains $property) { Get-ItemProperty $key.PSPath -name $property | select -expand $property } } function Get-VersionName($key) { $name = Get-KeyPropertyValue $key Version $sp = Get-KeyPropertyValue $key SP $install = Get-KeyPropertyValue $key Install if($sp) { "$($_.PSChildName) $name SP $sp" } else{ "$($_.PSChildName) $name" } } function Get-FrameworkVersion{ dir "hklm:\SOFTWARE\Microsoft\NET Framework Setup\NDP\" |? {$_.PSChildName -like "v*"} |%{ if( $_.Property -contains "Version") { Get-VersionName $_ } else{ $parent = $_ Get-ChildItem $_.PSPath |%{ $versionName = Get-VersionName $_ "$($parent.PSChildName) $versionName" } } } } $v4Directory = "hklm:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" if(Test-Path $v4Directory) { $v4 = Get-Item $v4Directory $version = Get-KeyPropertyValue $v4 Release switch($version){ 378389 {".NET Framework 4.5"; break;} 378675 {".NET Framework 4.5.1 installed with Windows 8.1 or Windows Server 2012 R2"; break;} 378758 {".NET Framework 4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2"; break;} 379893 {".NET Framework 4.5.2"; break;} { 393295, 393297 -contains $_} {".NET Framework 4.6"; break;} { 394254, 394271 -contains $_} {".NET Framework 4.6.1"; break;} { 394802, 394806 -contains $_} {".NET Framework 4.6.2"; break; } } }Он был написан на основе как определить, какие версии .NET Framework установлены. Пожалуйста, используйте командлет Get-FrameworkVersion() функция, чтобы получить информацию об установленных .Чистая Framework версий.
С помощью Signum.Коммунальные услуги библиотека SignumFramework (который вы можете использовать автономно), вы можете получить его красиво и не имея дело с реестром самостоятельно:
AboutTools.FrameworkVersions().ToConsole(); //Writes in my machine: //v2.0.50727 SP2 //v3.0 SP2 //v3.5 SP1
в Windows 7 (он также должен работать для Windows 8, но я его не тестировал):
перейти в командную строку
шаги для перехода в командную строку:
- Нажмите Меню Пуск
- в поле поиска введите "cmd" (без кавычек)
- открыть cmd.exe
в cmd, введите команду
wmic /namespace:\root\cimv2 path win32_product where "name like '%%.NET%%'" get versionЭто дает последнюю версию установленной NET Framework.
можно также попробовать Raymond.cc Утилиты то же самое.
посмотреть как определить, какие версии .NET Framework установлены (MSDN).
MSDN предлагает один пример функции, который, кажется, выполняет эту работу для версии 1-4. Согласно статье, выход метода:
v2.0.50727 2.0.50727.4016 SP2 v3.0 3.0.30729.4037 SP2 v3.5 3.5.30729.01 SP1 v4 Client 4.0.30319 Full 4.0.30319обратите внимание, что для "версии 4.5 и более поздних" есть еще одна функция.


Comments