비슷한 질문이 여기 에 요청 되었지만 .NET 3.5에만 해당됩니다. 특히, 나는 다음을 찾고 있습니다.
- 어떤 .NET Framework 버전과 서비스 팩이 설치되어 있는지 확인하는 올바른 방법은 무엇입니까?
- 사용할 수있는 레지스트리 키 목록이 있습니까?
- Framework 버전간에 종속성이 있습니까?
비슷한 질문이 여기 에 요청 되었지만 .NET 3.5에만 해당됩니다. 특히, 나는 다음을 찾고 있습니다.
답변:
레지스트리는 특정 버전의 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)을 설치합니다.
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);
}
}
}
}
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP", true)
하려면 Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP")
관리자가 아닌 사용자에 대한 보안 예외를 방지 할 수 있습니다.
내 시스템에 설치된 .NET 버전 4.5.2가 있는지 감지하고 싶었고 ASoft .NET Version Detector 보다 나은 솔루션을 찾지 못했습니다 .
다른 .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\
Wow6432Node
레지스트리 키 WOW64 레지스트리 리플렉터의 일부인 미러 64 비트 및 32 비트 레지스트리보기 사이의 특정 키 값. 레지스트리가 리디렉션 및 미러링을 자동으로 처리하므로이 키에 직접 액세스 할 필요가 없습니다.
GUI 툴인 ASoft .NET Version Detector 가 있으며, 이는 항상 신뢰성이 높은 것으로 입증되었습니다. 명령 행에서 XML 출력의 파일 이름을 지정하여 XML 파일을 작성할 수 있습니다.
이것을 자동화에 사용할 수 있습니다. .NET에 의존하지 않는 언어로 작성된 작은 프로그램이며 설치가 필요하지 않습니다.
설치된 .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 () 함수를 사용하십시오.
은 Using Signum.Utilities의 에서 라이브러리 SignumFramework을 (당신이 독립 실행 형 사용할 수있는), 당신은 정중하게 자신하여 레지스트리를 처리하지 않고 그것을 얻을 수 있습니다 :
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에서도 작동해야하지만 테스트하지는 않았습니다) :
명령 프롬프트로 이동
명령 프롬프트로 이동하는 단계 :
cmd에서이 명령을 입력하십시오.
wmic /namespace:\\root\cimv2 path win32_product where "name like '%%.NET%%'" get version
이렇게하면 최신 버전의 NET Framework가 설치됩니다.
하나는 시도 할 수 Raymond.cc utility와를 동일합니다.
cmd
하면 나에게 준다 ERROR: Description = Invalid namespace
.
ERROR: Description = Invalid namespace