.NET Framework 버전과 서비스 팩이 설치된 것을 어떻게 발견합니까?


비슷한 질문이 여기 에서 제기되었지만 .NET 3.5에만 해당됩니다. 특히, 나는 다음을 찾고있다 :

  1. 어떤 .NET Framework 버전과 서비스 팩이 설치되었는지 확인하는 올바른 방법은 무엇입니까?
  2. 사용할 수있는 레지스트리 키 목록이 있습니까?
  3. Framework 버전간에 종속성이 있습니까?


Answers


레지스트리는 프레임 워크의 특정 버전이 설치되어 있는지를 감지 하는 공식적인 방법 입니다.

원하는 레지스트리 키에 따라 필요한 레지스트리 키를 변경하십시오.

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

일반적으로 다음을 찾고 있습니다.

"Install"=dword:00000001

값이 숫자 ( REG_DWORD )가 아닌 문자열 ( REG_SZ ) 인 .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\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

보시다시피 Windows Media Center 또는 Windows XP Tablet Edition에서 실행중인 경우 .NET 1.0의 SP 수준 결정은 변경됩니다. 다시 말하면, .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의 경우이 키 중 하나의 문자열 값은 #,#,####,# 형식 #,#,####,# 집니다. 문자열의 #,#,#### 부분은 Framework 버전입니다.

  • .NET 1.1의 경우 버전 번호를 나타내는 레지스트리 키 자체의 이름을 사용합니다.

  • 마지막으로, 종속성을 살펴보면 .NET 3.0은 .NET 2.0에 추가 기능을 추가하므로 .NET 3.0이 설치되었다고 올바르게 말하려면 .NET 2.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 2.0과 함께 실행할 수있는 CLR (CLR 버전 4.0)의 새 버전을 설치합니다.

.NET 4.5 업데이트

.NET 4.5가 설치된 경우 레지스트리에 v4.5 키가 없습니다. 대신 HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full 키에 Release 라는 값이 포함되어 있는지 확인해야합니다. 이 값이 있으면 .NET 4.5가 설치되고 그렇지 않으면 그렇지 않습니다. 자세한 내용은 여기 및 여기 에서 찾을 수 있습니다.




이 질문에 대한 공식 Microsoft 답변은 다음 기술 자료를 참조하십시오.

피드백 보내기 기술 자료 : 318785 - 마지막 검토 : 2008 년 11 월 7 일 화요일 - 수정 : 20.1 설치된 .NET Framework 버전과 서비스 팩 적용 여부를 확인하는 방법

불행하게도, 2.0 디렉토리의 mscorlib.dll 버전은 2.0 버전을 가지고 있고 3.5 SP1이 설치되어 있더라도 mscorlib.dll 버전이 3.0 또는 3.5 디렉토리에 없기 때문에 불행하게도 작동하지 않습니다 ... 이유 공식적인 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=1 값이 있어야합니다. (Windows Vista의 .NET 2.0에는 예를 들어 OS의 일부이기 때문에 마지막 버전이 없습니다.)




내 시스템에 .NET 버전 4.5.2가 설치되어 있는지 감지하고 싶었고 ASoft .NET 버전 감지기 보다 나은 해결책을 찾지 못했습니다.

다른 .NET 버전을 보여주는이 도구의 스냅 샷 :




FWIW ... 여기 실제 세계에서 널리 테스트 된 것으로 보이는 또 다른 해결책 이 있습니다 (그러나 C 언어로되어 있습니다)




64 비트 OS의 경우 경로는 다음과 같습니다.

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이 설치되어 있음을 의미합니다. 그러나 여기에 설명 된대로이 값은 Windows 8.1에서는 378675입니다.




항상 신뢰할 수있는 것으로 입증 된 GUI 도구 인 ASoft .NET 버전 감지기 가 있습니다. 명령 행에서 XML 출력의 파일 이름을 지정하여 XML 파일을 작성할 수 있습니다.

이것을 자동화에 사용할 수 있습니다. 이 프로그램은 비표준 언어로 작성되어 설치가 필요없는 작은 프로그램입니다.




내 컴퓨터에서 .NET Framework의 버전을 확인해야했는데 제어판에 가서 "프로그램 제거"옵션을 선택해야했습니다. 그 후 필자는 이름으로 프로그램을 정렬하고 Microsoft .NET Framework 4 Client Profile을 발견했습니다.




다음은 설치된 .NET 프레임 워크 버전을 가져 오는 PowerShell 스크립트입니다.

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 버전 확인 방법을 기반으로 작성되었습니다. 설치된 .NET 프레임 워크 버전에 대한 정보를 얻으려면 Get-FrameworkVersion () 함수를 사용하십시오.




SignumFramework (독립 실행 형을 사용할 수 있음)Signum.Utilities 라이브러리를 사용하면 레지스트리를 직접 처리하지 않고도 멋지게 얻을 수 있습니다.

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 Utilties 도 시도해 볼 수 있습니다.




방법 : MSDN (있는 .NET Framework 버전 설치 확인)을 참조하십시오.

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 이상"에는 또 다른 기능이 있음에 유의하십시오.