2013-08-07 2 views
1

사용자가 SDK 버전과 비트 유형을 선택하여 .Net Framework SDK 도구를 실행할 수 있도록하는 도구를 업데이트하고 있습니다..Net SDK Framework 4.5.1 레지스트리 키

이 작업을 수행하려면 최신 SDK의 설치 위치가 필요하며 v1.0으로 다시 돌아갑니다. 지금까지 나는 다음을 발견하고 확인을 찾고있다.

v1.0, v1.1 및 v2.0 프레임 워크 설치 폴더 레지스트리 키는 해당 레지스트리 플랫폼 버전 아래에 있습니다. 즉, 64 비트 설치 폴더의 위치는 32 비트 설치 디렉토리가 32 비트 레지스트리 키인 64 비트 레지스트리 항목입니다.

Examples: 

Windows XP: 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 

Windows 7 64 bit (v2.0 only): 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\.NETFramework\v2.0 
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\.NETFramework\v2.0 

3.0, V3.5, 4.0 프레임 워크 설치 폴더는 32 비트 설치 폴더 및 64 비트 설치 폴더에 모두 32 비트 및 64 비트 레지스트리 키를 가지고있다. 이로 인해 이러한 버전의 작업이 단순 해집니다. OS 비트 버전과 사용자 권한으로 키를 읽으십시오.

Examples: 

Windows 7 64 bit: 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDKNetFx35Tools 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDKNetFx35Tools-x64 

v4.5, v4.5.1 프레임 워크 설치 폴더는 32 비트 레지스트리 키 아래에있는 것 같습니다. 64 비트 설치가 있더라도 레지스트리 키는 3264WoW 노드 아래에만 존재하므로 32 비트 응용 프로그램과 같이 읽어야합니다.

Examples: 

Windows 7 64 bit: 
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools 
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools-x64 

주 Wow6432Node에 대한 참조 때 64 비트 윈도우에서 32 비트 플래그 읽을 레지스트리를 사용하여 읽을 수있다. 나는 Wow6432Node를 직접 준비 할 필요가 없다. 단지 레지스트리 객체에서 어느 섹션을 읽을 지 지정해야한다.

이것은 복잡하고 공정한 것 같아서 내가 맞지 않다고 생각하게 만듭니다. 또한 .Net SDK 설치 위치에 대한 확실한 문서를 찾을 수 없었습니다.

그래서 여기에 놓친 것이 있거나 잘못되었습니다.

답변

1

당신 말이 맞아, 8.1a에 경로 z는 Wow6432Node을 읽고 더 나은 솔루션이 없다

public static string GetSdk81Path(string sdkIdent) 
     { 
      string regPath = Path.Combine(@"SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1A\", sdkIdent); 
      using (RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)) 
      using (RegistryKey regKey = baseKey.OpenSubKey(regPath, false)) 
      { 
       if (regKey == null) 
       { 
        throw new RegistryKeyNotFoundException("Registry key not found.", baseKey, regPath); 
       } 
       return regKey.GetValue("InstallationFolder").ToString(); 
      } 
     }