2011-08-22 4 views
0

저는 현재 레지스트리 탐색기를 구축하고 있습니다. 주로 더 나은 검색 작업을 지원하기 위해서입니다. '모두 찾기'및 정규 표현식과 같습니다. 내가 직면 한 한 가지 문제는 일부 키가 열 때 보안 예외가 발생한다는 것입니다. 관리자 특권으로 앱을 실행하려고했지만 내 사용자 계정은 관리자이기도합니다. "requireAdministrator"요청 권한으로 매니페스트를 임베드했습니다. 또한 ClickOnce 보안 설정을 requireAdministrator와 호환되지 않는 완전 신뢰로 설정하려고 시도했거나 Visual Studio에서 알려주었습니다 ... 아무 것도이 예외를 피하는 데 도움이되지 않습니다.레지스트리 액세스 예외 문제

모든 키를 반복하고 싶습니다. 나는 열쇠를 추가/삭제하고 싶지 않다. 사용자가 키를 삭제하고 권한을 가지고 있지 않으면 오류 메시지가 표시됩니다. 난 그냥 무제한 읽기 액세스 권한을 가질 수 있기를 원합니다. 이것이 가능한가?

FTR : 저는 Win7 x64이고 Vs2010u를 사용하고 있습니다. 프로젝트는 .net 4.0의 C#으로 작성되었습니다. regedit가 일부 키를 편집 할 수 없더라도 모든 키를 읽을 수있는 경우. 우리도 똑같은 일을하는 앱을 만들 수있는 것이 적절할 것 같습니다. 나는 그것을 매우 어렵게 생각하고 있지만 www에 대한 실질적인 도움이없는 것 같습니다. 링크 - 링크 서클 만, 예.

private void IterateSubKeys(RegistryKeyModel key) { 

     var subKeys = key.Key.GetSubKeyNames(); 
     var values = key.Key.GetValueNames(); 

     foreach (var valuename in values) { 
      try { 
       var valueKind = key.Key.GetValueKind(valuename); 
       var value = key.Key.GetValue(valuename); 

       key.Values.Add(new RegistryValueModel(valuename, value, valueKind)); 
      } 
      catch { } 
     } 

     foreach (var keyname in subKeys) { 
      try { 
       var subkey = key.Key.OpenSubKey(
        keyname, 
        RegistryKeyPermissionCheck.ReadSubTree, 
        RegistryRights.ReadKey); 

       key.SubKeys.Add(new RegistryKeyModel(subkey)); 
      } 
      catch { Console.WriteLine("Error reading key: {0}", keyname); } 
     } 
    } 
+0

regedit에서 프로그램에서 찾을 수없는 키를 볼 수 있는지 확인할 수 있습니까? regedit조차도 볼 수없는 키가 있기 때문에 (하지만 프로그램이 열거 할 수도 있습니다)? –

답변

2

이것은 의도적으로 설계된 :

[편집]

다음은 키를 읽는 코드입니다. 시스템 계정에서만 액세스 할 수있는 많은 보안 관련 키가 있습니다. 해당 계정을 사용할 수 없습니다. Regedit는 이러한 키를 읽을 수 없으며 단지 보이지 않습니다. 비싼 예외를 피하려면 pinvoke가 필요합니다.