it-source

무엇을 탐지할 수 있습니까?NET Framework 버전 및 서비스 팩이 설치되어 있습니까?

criticalcode 2023. 5. 1. 21:27
반응형

무엇을 탐지할 수 있습니까?NET Framework 버전 및 서비스 팩이 설치되어 있습니까?

여기에서도 유사한 질문이 제기되었지만 에 한정되었습니다.NET 3.5. 구체적으로 다음을 찾고 있습니다.

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

레지스트리는 특정 버전의 Framework가 설치되었는지 여부를 탐지하는 공식적인 방법입니다.

여기에 이미지 설명 입력

원하는 Framework 버전에 따라 필요한 레지스트리 키를 변경합니다.

프레임워크 버전 레지스트리 키------------------------------------------------------------------------------------------1.0 HKLM\소프트웨어\Microsoft\.NET Framework\정책\v1.0\37051.1 HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v1.1.4322\설치2.0 HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v2.0.50727\설치하다3.0 HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v3.0\설치\설치 성공3.5 HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v3.5\설치4.0 클라이언트 프로파일 HKLM\소프트웨어\Microsoft\NET 프레임워크 설정\NDP\v4\클라이언트\설치하다4.0 전체 프로필 HKLM\소프트웨어\Microsoft\NET 프레임워크 설정\NDP\v4\전체\설치하다

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

"Install"=dword:00000001

이며, 문자열(NET 1.0, 값문자열은여을)입니다.REG_SZ숫자보는다▁()는다▁rather ())보다는REG_DWORD).

서비스 팩 레벨을 결정하는 방법은 유사한 패턴을 따릅니다.

프레임워크 버전 레지스트리 키------------------------------------------------------------------------------------------1.0 HKLM\소프트웨어\마이크로소프트\활성 설정\설치된 구성 요소\{78705f0d-e8db-4b2d-8193-982bda15ecd}\버전1.0[1] HKLM\소프트웨어\마이크로소프트\활성 설정\설치된 구성 요소\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\버전1.1 HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v1.1.4322\SP2.0 HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v2.0.50727\SP3.0 HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v3.0\SP3.5 HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v3.5\SP4.0 클라이언트 프로파일 HKLM\소프트웨어\Microsoft\NET 프레임워크 설정\NDP\v4\클라이언트\서비스4.0 전체 프로필 HKLM\소프트웨어\Microsoft\NET 프레임워크 설정\NDP\v4\전체\서비스
Windows Media Center 또는 Windows XP Tablet Edition

보다시피 에 대한 SP 수준 결정.Windows Media Center 또는 Windows XP Tablet Edition에서 실행 중인 경우 NET 1.0이 변경됩니다.다시.NET 1.0은 문자열 값을 사용하는 반면 나머지는 모두 DWORD를 사용합니다.

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

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

프레임워크 버전 레지스트리 키------------------------------------------------------------------------------------------1.0 HKLM\소프트웨어\마이크로소프트\활성 설정\설치된 구성 요소\{78705f0d-e8db-4b2d-8193-982bda15ecd}\버전1.0[1] HKLM\소프트웨어\마이크로소프트\활성 설정\설치된 구성 요소\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}\버전1.1 HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v1.1.43222.0[2] HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v2.0.50727\버전2.0[3] HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v2.0.50727\증분3.0 HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v3.0\버전3.5 HKLM\소프트웨어\마이크로소프트\NET 프레임워크 설정\NDP\v3.5\버전4.0 클라이언트 프로파일 HKLM\소프트웨어\Microsoft\NET 프레임워크 설정\NDP\v4\버전4.0 전체 프로필 HKLM\소프트웨어\Microsoft\NET 프레임워크 설정\NDP\v4\버전
Windows Media Center 또는 Windows XP Tablet Edition.NET 2.0 SP1.NET 2.0 원래 릴리스(RTM)

다시.NET 1.0은 문자열 값을 사용하는 반면 나머지는 모두 DWORD를 사용합니다.

추가 참고 사항

  • . 1경우 키 중은 .NET 1.0의 경우 이러한 키 중 하나의 문자열 값의 형식은 다음과 같습니다.#,#,####,#.#,#,####문자열의 일부가 Framework 버전입니다.

  • .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가 설치되어 있고 그렇지 않으면 설치되어 있지 않습니다.자세한 내용은 여기와 여기에서 확인할 수 있습니다.

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

문서 ID: 318785 - 마지막 리뷰:2008년 11월 7일 - 개정판: 20.1 의 버전을 결정하는 방법.NET Framework 설치 및 서비스 팩 적용 여부

불행히도 2.0 디렉토리의 mscorlib.dll 버전이 2.0 버전이고 3.0 또는 3.5 디렉토리에 mscorlib.dll 버전이 없기 때문에 3.5 SP1이 설치되어 있음에도 작동하지 않는 것 같습니다.왜 마이크로소프트의 공식적인 답변이 그렇게 잘못 알려졌을까요?

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는 A 소프트웨어보다 더 나은 솔루션을 찾을 수 없었습니다.NET 버전 디텍터입니다.

이 도구의 스냅샷이 다르게 표시됩니다.NET 버전:

이 도구의 스냅샷이 다르게 표시됩니다.

다의 하키열의 하위 합니다.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP각 하위 키는 입니다.NET 버전.그랬어야 했어요.Install=1하는 경우 값과 팩을 보여주는 SP 값입니다.MSI=1MSI를 사용하여 설치한 경우 값.예를 들어 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라는 이름의 키의 실제 값을 확인해야 하며, 키의 존재 여부를 확인해야 합니다.378758의 값은 다음을 의미합니다.NET Framework 4.5.1이 설치됩니다.그러나 여기에 설명된 대로 윈도우즈 8.1의 경우 이 값은 378675입니다.

사용 가능한 GUI 도구인 A소프트가 있습니다.NET 버전 디텍터, 항상 높은 신뢰성이 입증되었습니다.명령줄에서 XML 출력의 파일 이름을 지정하여 XML 파일을 만들 수 있습니다.

자동화에 사용할 수 있습니다.그것은 비-로 작성된 작은 프로그램입니다.NET 종속 언어이며 설치할 필요가 없습니다.

의 버전을 확인해야 했습니다.컴퓨터에 NET 프레임워크를 설치하고 제어판으로 가서 "프로그램 제거" 옵션을 선택했습니다.그 후, 저는 이름별로 프로그램을 정렬했고 마이크로소프트를 찾았습니다.NET Framework 4 클라이언트 프로파일.

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

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() 함수를 사용하십시오.NET 프레임워크 버전.

시그넘을 사용합니다.독립 실행형으로 사용할 수 있는 Signum Framework의 유틸리티 라이브러리를 사용하면 레지스트리를 직접 처리하지 않고도 쉽게 얻을 수 있습니다.

AboutTools.FrameworkVersions().ToConsole();
//Writes in my machine:
//v2.0.50727 SP2
//v3.0 SP2
//v3.5 SP1

방법: 결정을 참조하십시오.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 이상"에는 다른 기능이 있습니다.

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 Utilities를 사용해 볼 수도 있습니다.

언급URL : https://stackoverflow.com/questions/199080/how-do-i-detect-what-net-framework-versions-and-service-packs-are-installed

반응형