2012-06-15 2 views
1

Windows 서버 2008에서 레지스트리 항목을 읽는 동안 문제가 발생했습니다. 문제는 코드가 2008 년이지만 R2 인 다른 서버에서도 작동한다는 것입니다. 내가 확인하고 레지스트리 항목이 제자리에 있으며, 나는 관리자로서 프로그램을 실행했습니다. 다음은 코드 샘플입니다. Registry.LocalMachine.OpenSubKey에 의해 반환 된 regitry 키가 null입니다. 이것은 64 비트 응용 프로그램입니다레지스트리 항목을 읽을 수 없습니다

string strPath = ""; 
try 
{ 
    //The registry key: 
    //SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\SnmpClient.exe 
    using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(strKey)) 
    { 
      try 
      { 
       //InstallDirectory 
       if (!(rk.GetValue(strValue) == null)) 
       { 
        strPath += rk.GetValue(strValue).ToString(); 
       } 
      } 
      catch(Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
    } 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.Message); 
} 
return strPath; 
+1

에서 실행되는 32 비트 응용 프로그램입니다? – Arran

+1

무엇이 당신의 질문입니까? – Achim

+0

문제점은 무엇입니까? 예외를 throw합니까? 그렇다면 어떤 선과 예외가 있습니까? – Chris

답변

3

응용 프로그램을 32 또는 64 비트로 컴파일하고 있다고 말하지 않았습니다. 32 비트 것과 응용 프로그램을 컴파일하는 경우

, 그것은 마이크로 소프트 \ WINDOWS \

HKEY_LOCAL_MACHINE \ 소프트웨어 \ Wow6432Node로 리디렉션거야 \ CurrentVersion을 응용 프로그램 경로 ...

\

올바른 키가 있는지 확인하거나 64 비트로 컴파일하십시오.

2

다음은 64 비트 하이브를 여는 방법입니다.

var localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); 
0

Graham Wager와 Tom Brothers 모두 제안 된 접근 방식을 사용합니다. VS 2013 및 MSTEST를 사용하여 단위 테스트를 실행하는 동안 직면 한 문제의 2 센트 :

단위 테스트를 통해 레지스트리에서 읽는 방법을 실행할 때 존재했던 레지스트리 키는 항상 레지스트리에서 null로 되돌아 왔습니다 .LocalMachine.OpenSubkey (string, bool) 메서드입니다. 문제는 테스트 설정이 기본 프로세서 아키텍처를 X86으로 만들었 기 때문에 테스트를 실행할 때 Wow6432Node을 읽는 중이었습니다.

요약 :

VS 2013 MSTEST와 윈도우 7에서 실행되는 64

테스트로 이동 테스트가 64 비트에서 실행되도록하려면 비트 -> 테스트 설정 -> 기본 프로세서 아키텍처를 선택 X64

: 예외가 던져합니까 Wow6432Node 64 비트 시스템

관련 문제