Jak wykryć what.NET zainstalowane są wersje Framework i service Pack?

Podobne pytanie zadano tutaj , ale było specyficzne dla. NET 3.5. W szczególności Szukam:

  1. jaki jest prawidłowy sposób określenia, które wersje. NET Framework i Dodatki service Pack są zainstalowane?
  2. czy istnieje lista kluczy rejestru, które można użyć?
  3. Czy istnieją jakieś zależności między wersjami frameworka?
Author: Peter Mortensen, 2008-10-14

13 answers

Rejestr jest oficjalnym sposobem wykrywania, czy zainstalowana jest konkretna wersja frameworka.

Tutaj wpisz opis obrazka

Które klucze rejestru są potrzebne zmieniają się w zależności od wersji frameworka, której szukasz:

Framework Version  Registry Key
------------------------------------------------------------------------------------------
1.0                HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 
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

Ogólnie szukasz:

"Install"=dword:00000001

Z wyjątkiem. NET 1.0, gdzie wartością jest łańcuch znaków (REG_SZ), a nie Liczba (REG_DWORD).

Określenie poziomu service pack następuje w podobny sposób wzór:

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

Jak widać, określenie poziomu SP dla. NET 1.0 zmienia się, jeśli używasz Windows Media Center lub Windows XP Tablet Edition. Ponownie,. NET 1.0 używa wartości łańcuchowej, podczas gdy wszystkie inne używają DWORD.

Dla. NET 1.0 wartość ciągu znaków w każdym z tych kluczy ma format #,#,####,#. Ostatni # to poziom dodatku Service Pack.

Chociaż nie prosiłem o to wprost, jeśli chcesz znać dokładny numer wersji frameworka, którego chcesz użyć te klucze rejestru:

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)

Ponownie,. NET 1.0 używa wartości łańcuchowej, podczas gdy wszystkie inne używają DWORD.

Uwagi Dodatkowe

  • Dla. NET 1.0 wartość ciągu znaków w każdym z tych kluczy ma format #,#,####,#. #,#,#### część łańcucha jest wersją Framework.

  • W przypadku. NET 1.1 używamy nazwy samego klucza rejestru, która reprezentuje numer wersji.

  • Wreszcie, jeśli spojrzeć na zależności,. NET 3.0 dodaje dodatkową funkcjonalność do. NET 2.0, więc zarówno. NET 2.0, jak i. NET 3.0 muszą być zainstalowane, aby poprawnie powiedzieć, że.NET 3.0 jest zainstalowany. Podobnie,. NET 3.5 dodaje dodatkowe funkcje do. NET 2.0 i. NET 3.0, tak. NET 2.0,. NET 3.0 i. NET 3. wszyscy powinni ocenić, czy jest zainstalowany, aby poprawnie powiedzieć, że. NET 3.5 jest zainstalowany.

  • . NET 4.0 instaluje nową wersję CLR (CLR version 4.0), która może działać obok CLR 2.0.

Aktualizacja dla. NET 4.5

Nie będzie klucza v4.5 w rejestrze, jeśli. NET 4.5 jest zainstalowany. Zamiast tego musisz sprawdzić, czy klucz HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full zawiera wartość o nazwie Release. Jeśli ta wartość jest obecna, jest zainstalowana.NET 4.5, W przeciwnym razie nie jest. Więcej szczegółów można znaleźć tutaj i tutaj .

 358
Author: Scott Dorman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-28 10:41:35

[[0]}oficjalna odpowiedź Microsoft na to pytanie znajduje się w poniższym artykule w Bazie wiedzy:

ID artykułu: 318785-Ostatnia Recenzja: listopad 7, 2008-Wersja: 20.1 Jak określić, które wersje. NET Framework są zainstalowane i czy zostały zastosowane dodatki service Pack

Niestety, nie wydaje się działać, ponieważ mscorlib.wersja dll w katalogu 2.0 ma wersję 2.0 i nie ma mscorlib.wersja dll w wersji 3.0 lub 3.5 katalogi mimo zainstalowania 3.5 SP1 ... dlaczego oficjalna odpowiedź Microsoftu miałaby być tak błędna?

 17
Author: anon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-26 07:03:09

Framework 4 beta instaluje się na innym kluczu rejestru.

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);
            }
        }
    }
}
 16
Author: midspace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-31 04:36:49

Wylicz podklucze HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP. Każdy podklucz jest wersją . Net. Powinien mieć wartość Install=1, jeśli jest obecny na komputerze, wartość SP, która pokazuje dodatek service pack i wartość MSI=1, jeśli został zainstalowany przy użyciu MSI. (. NET 2.0 w systemie Windows Vista nie ma na przykład ostatniego, ponieważ jest częścią systemu operacyjnego.)

 8
Author: Franci Penov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-13 22:07:40

Chciałem wykryć obecność. NET w wersji 4.5.2 zainstalowanej w moim systemie i nie znalazłem lepszego rozwiązania niż Asoft. Net Detektor wersji.

Migawka tego narzędzia pokazująca różne wersje. NET:

Migawka tego narzędzia pokazująca różne wersje. NET

 6
Author: Faisal Mq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-22 15:07:17

Dla 64-bitowego systemu operacyjnego ścieżka będzie:

HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\
 5
Author: abhishek mehta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-05 16:07:16

Aktualizacja dla. NET 4.5.1

Teraz, gdy. NET 4.5.1 jest dostępny, należy sprawdzić rzeczywistą wartość klucza o nazwie Release w rejestrze, a nie tylko jego istnienie. Wartość 378758 oznacza, że. NET Framework 4.5.1 jest zainstalowany. Jednak, jak opisano tutaj {[4] } Ta wartość jest 378675 w systemie Windows 8.1.

 5
Author: JasonMcF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-12 09:44:37

Jest dostępne narzędzie GUI, Asoft. Net Detektor wersji, który zawsze okazał się wysoce niezawodny. Może tworzyć pliki XML, określając nazwę pliku wyjścia XML w wierszu poleceń.

Możesz użyć tego do automatyzacji. Jest to malutki program, napisany w non-.NET zależny język i nie wymaga instalacji.

 5
Author: CarlR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-22 15:02:36

Musiałem się dowiedzieć, którą wersję. NET framework mam na swoim komputerze, a wszystko, co zrobiłem, to przejść do Panelu sterowania i wybrać opcję "Odinstaluj Program". Następnie posortowałem programy po nazwie i znalazłem profil Klienta Microsoft. NET Framework 4.

 4
Author: Kudzai K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-05 16:08:00

Oto skrypt PowerShell do uzyskania zainstalowanych wersji. 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; }
    }
}

Został napisany na podstawie Jak: określić, które wersje. NET Framework są zainstalowane. Użyj funkcji Get-FrameworkVersion (), aby uzyskać informacje o zainstalowanych wersjach. NET framework.

 3
Author: cezarypiatek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-10 08:33:46

Za pomocą Signum.Narzędzia biblioteka z SignumFramework (której możesz używać samodzielnie), możesz ją ładnie i bez zajmowania się rejestrem samodzielnie:

AboutTools.FrameworkVersions().ToConsole();
//Writes in my machine:
//v2.0.50727 SP2
//v3.0 SP2
//v3.5 SP1
 2
Author: mapache,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-22 14:58:27

W Windows 7 (powinien działać również Dla Windows 8, ale nie testowałem go):

Przejdź do wiersza polecenia

Kroki, aby przejść do wiersza polecenia:

  1. Kliknij Menu Start
  2. w polu wyszukiwania wpisz " cmd " (bez cudzysłowów)
  3. otwórz cmd.exe

W cmd wpisz polecenie

wmic /namespace:\\root\cimv2 path win32_product where "name like '%%.NET%%'" get version

Daje to zainstalowaną najnowszą wersję NET Framework.

Można też spróbować Raymond.cc Utilties dla tego samego.

 1
Author: Mayank Agarwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-22 15:05:28

Zobacz Jak: określić, które wersje. NET Framework są zainstalowane (MSDN).

MSDN proponuje jeden przykład funkcji, który wydaje się wykonywać zadanie dla Wersji 1-4. Zgodnie z artykułem wyjście metody to:

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

Zauważ, że dla "wersji 4.5 i późniejszych" istnieje inna funkcja.

 0
Author: Olivier de Rivoyre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-20 10:23:28