Как я могу обнаружить what.NET установлены версии платформы и пакеты обновления?



здесь был задан аналогичный вопрос, но он был специфичен для .NET 3.5. В частности, я ищу следующее:




  1. что такое правильный способ, чтобы определить, какие .Установлен NET Framework версий и пакетов обновления?

  2. есть ли список разделов реестра, которые можно использовать?

  3. существуют ли какие-либо зависимости между версиями фреймворка?

669   13  

13 ответов:

реестр официальный способ чтобы определить, установлена ли определенная версия фреймворка.

enter image description here

какие разделы реестра необходимо изменить в зависимости от версии фреймворка, которую вы ищете:

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 на этот вопрос в следующей статье базы знаний:

артикль ID: 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 устанавливается в другой раздел реестра.

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:

Snapshot of this tool showing different .NET versions

для 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, но я его не тестировал):

перейти в командную строку

шаги для перехода в командную строку:

  1. Нажмите Меню Пуск
  2. в поле поиска введите "cmd" (без кавычек)
  3. открыть 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

    Ничего не найдено.