[.net] 설치된 .NET Framework 버전 및 서비스 팩을 어떻게 탐지합니까?

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

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


답변

레지스트리는 특정 버전의 Framework가 설치되어 있는지 확인하는 공식적인 방법 입니다.

여기에 이미지 설명을 입력하십시오

필요한 레지스트리 키는 찾고있는 Framework 버전에 따라 변경됩니다.

프레임 워크 버전 레지스트리 키
-------------------------------------------------- ----------------------------------------
1.0 HKLM \ Software \ Microsoft \ .NETFramework \ 정책 \ v1.0 \ 3705
1.1 HKLM \ Software \ Microsoft \ NET Framework 설치 \ NDP \ v1.1.4322 \ 설치
2.0 HKLM \ Software \ Microsoft \ NET Framework 설치 \ NDP \ v2.0.50727 \ 설치
3.0 HKLM \ Software \ Microsoft \ NET Framework 설치 \ NDP \ v3.0 \ Setup \ InstallSuccess
3.5 HKLM \ Software \ Microsoft \ NET Framework 설치 \ NDP \ v3.5 \ Install
4.0 클라이언트 프로파일 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Client \ Install
4.0 전체 프로필 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Full \ Install

일반적으로 당신은 찾고 있습니다 :

"Install"=dword:00000001

.NET 1.0을 제외하고 값은 REG_SZ숫자 ( REG_DWORD)가 아닌 문자열 ( )입니다.

서비스 팩 수준 결정은 비슷한 패턴을 따릅니다.

프레임 워크 버전 레지스트리 키
-------------------------------------------------- ----------------------------------------
1.0 HKLM \ Software \ Microsoft \ Active 설치 \ 설치된 구성 요소 \ {78705f0d-e8db-4b2d-8193-982bdda15ecd} \ Version
1.0 [1] HKLM \ 소프트웨어 \ Microsoft \ Active 설치 \ 설치된 구성 요소 \ {FDC11A6F-17D1-48f9-9EA3-9051954BAA24} \ 버전
1.1 HKLM \ Software \ Microsoft \ NET Framework 설치 \ NDP \ v1.1.4322 \ SP
2.0 HKLM \ Software \ Microsoft \ NET Framework 설치 \ NDP \ v2.0.50727 \ SP
3.0 HKLM \ Software \ Microsoft \ NET Framework 설치 \ NDP \ v3.0 \ SP
3.5 HKLM \ Software \ Microsoft \ NET Framework 설치 \ NDP \ v3.5 \ SP
4.0 클라이언트 프로파일 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Client \ Servicing
4.0 전체 프로필 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Full \ Servicing

[1] Windows Media Center 또는 Windows XP Tablet Edition

보다시피, Windows Media Center 또는 Windows XP Tablet Edition에서 실행중인 경우 .NET 1.0의 SP 수준 결정이 변경됩니다. .NET 1.0은 문자열 값을 사용하지만 다른 모든 것은 DWORD를 사용합니다.

.NET 1.0의 경우이 키 중 하나의 문자열 값 형식은 #, #, ####, #입니다. 마지막 #은 서비스 팩 수준입니다.

명시 적으로 요청하지는 않았지만 Framework의 정확한 버전 번호를 알고 싶다면 다음 레지스트리 키를 사용하십시오.

프레임 워크 버전 레지스트리 키
-------------------------------------------------- ----------------------------------------
1.0 HKLM \ Software \ Microsoft \ Active 설치 \ 설치된 구성 요소 \ {78705f0d-e8db-4b2d-8193-982bdda15ecd} \ Version
1.0 [1] HKLM \ 소프트웨어 \ Microsoft \ Active 설치 \ 설치된 구성 요소 \ {FDC11A6F-17D1-48f9-9EA3-9051954BAA24} \ 버전
1.1 HKLM \ Software \ Microsoft \ NET Framework 설치 \ NDP \ v1.1.4322
2.0 [2] HKLM \ 소프트웨어 \ Microsoft \ NET Framework 설치 \ NDP \ v2.0.50727 \ 버전
2.0 [3] HKLM \ 소프트웨어 \ Microsoft \ NET Framework 설치 \ NDP \ v2.0.50727 \ 증가
3.0 HKLM \ Software \ Microsoft \ NET Framework 설치 \ NDP \ v3.0 \ Version
3.5 HKLM \ Software \ Microsoft \ NET Framework 설치 \ NDP \ v3.5 \ Version
4.0 클라이언트 프로파일 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Version
4.0 전체 프로필 HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v4 \ Version

[1] Windows Media Center 또는 Windows XP Tablet Edition
[2] .NET 2.0 SP1
[3] .NET 2.0 원본 릴리스 (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 및 .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 업데이트

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


답변

다음 기술 자료 문서에서이 질문에 대한 공식 Microsoft 답변이 있습니다.

기사 ID : 318785-최종 검토 : 2008 년 11 월 7 일-개정 : 20.1 설치된 .NET Framework 버전 확인 방법 및 서비스 팩 적용 여부

불행히도 2.0 디렉토리의 mscorlib.dll 버전은 2.0 버전이며 3.5 SP1이 설치되어 있어도 3.0 또는 3.5 디렉토리에 mscorlib.dll 버전이 없기 때문에 작동하지 않는 것 같습니다 … 왜 공식 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);
            }
        }
    }
}


답변

내 시스템에 설치된 .NET 버전 4.5.2가 있는지 감지하고 싶었고 ASoft .NET Version Detector 보다 나은 솔루션을 찾지 못했습니다 .

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

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


답변

의 하위 키를 열거하십시오 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP. 각 하위 키는 .NET 버전입니다. Install=1시스템에있는 MSI=1경우 값 , 서비스 팩을 표시하는 SP 값 및 MSI를 사용하여 설치된 경우 값을 가져야 합니다 . (예 : Windows Vista의 .NET 2.0에는 OS의 일부이므로 마지막 버전이 없습니다.)


답변

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

HKEY_LOCAL_MACHINE\SOFTWARE\wow6432Node\Microsoft\NET Framework Setup\NDP\


답변

.NET 4.5.1 업데이트

.NET 4.5.1을 사용할 수있게되었으므로 레지스트리에서 Release라는 Release 키의 실제 값을 확인해야합니다. 378758 값은 .NET Framework 4.5.1이 설치되었음을 의미합니다. 그러나 여기 설명 된 대로이 값은 Windows 8.1에서 378675입니다.