2011-04-18 4 views
3

를 던져, IOExeption가 발생합니다 :RegistryKey.GetSubKeyNames는 IOException이

string subKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products"; 
RegistryKey key = Registry.LocalMachine.OpenSubKey(subKey); 
string[] keys = key.GetSubKeyNames(); // throws IOException here 

:

여기

는 관련 코드 "더 이상 사용할 수있는 데이터가 없습니다" 사양

,
  • Win7에 64
  • VS 2010 SP1 "모든 CPU"의 빌드 타입을 사용하는 경우 예외가 발생합니다 .NET 3.5

  • ; 빌드 유형 "x86"을 사용하면 코드가 예상대로 실행되지만 위에 정의 된 subKey 문자열 변수에 명명 된 SubKey 경로 대신 "Wow6432Node"에서 키를 읽습니다.

    문제는입니다 : 어떻게 64 비트 시스템 (안 Wow6432Node)에 위에서 정의 된 subKey 경로에있는 모든 하위 키를 읽을 수 있습니까?

    참고 : 다른 64 비트 시스템에서 동일한 코드를 실행하면 오류없이 코드가 실행됩니다. 나는 어딘가에 손상된 레지스트리 키가 있다고 생각하는 경향이 거의 있습니까? 그렇다면 부패한 키를 어떻게 찾을 수 있는지에 대한 아이디어가 있습니까?

  • 답변

    2

    RegistryView에서 RegistryKey.OpenBaseKey()으로 적절하게 전달하십시오. 예를 들어

    :

    RegistryKey tempRegKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server"); 
    
    +0

    은'OpenBaseKey'는 4.0있어서 것으로 보인다. 나는 .NET 3.5를 진술해야했다. 그러나, 나는 4.0에서 OpenBaseKey를 사용하여 테스트를 실행했고 "더 이상 데이터를 사용할 수 없다"라는 동일한 예외가 발생했습니다. 이상한 점은 키 수를 얻을 수 있다는 것입니다. 키 이름의 열거는 아닙니다. –

    +0

    그러면 보안 문제 인 것 같습니다.하지만 그냥 직감이 ... – Aliostad

    +0

    전 시스템 관리자입니다. 나는 하위 키에 대한 모든 권한을 재설정하려고 시도했으나 하위 키에 권한을 상속 받았지만 "모든 키를 업데이트 할 수 없습니다"와 같은 오류로 실패했습니다. 200 개 이상의 하위 키가 있으며 수동으로 각각의 권한을 확인해야하는 것은 PITA가 될 것입니다. 나는 그들 중 1/10 정도를 직접 손으로 리셋했다. –

    관련 문제