2012-07-08 2 views
0

C를 사용하여 레지스트리를 편집하는 프로그램을 작성 중입니다. #사용자에게 레지스트리 편집 권한이 있는지 확인하십시오.

프로그램을로드 할 때 편집 권한이 있는지 확인하고 싶습니다. C#으로 체크인하는 가장 좋은 방법은 무엇입니까?

+0

가능한 중복 [C#에서 레지스트리 쓰기 권한을 얻는 방법] (http://stackoverflow.com/questions/721145/how-to-get-registry-write-permissions-in-c-sharp) –

답변

1

쓰기 권한으로 RegistryKey을 열어 봅니다. Exception이 있으면 사용 권한이 없습니다. 권한이 없다고 말하는 특정 예외에 대해 특정 할 수도 있습니다.

2

레지스트리의 각 노드에는 자체 ACL (액세스 자격 증명 목록)이 있습니다. 하나의 권리는 없습니다.

일반적으로 각 응용 프로그램에는 HKLM 하이브 또는 HKCU 하이브 또는 둘의 조합에 자체 레지스트리 노드가 있습니다.

전자의 경우 사용자는 컴퓨터의 관리자 여야하며, 후자의 경우 사용자는 자신의 레지스트리를 읽고 쓸 수 있습니다.

실제 액세스 권한을 확인하려면 RegistryKey.GetAccessControl method을 사용할 수 있습니다.

그러나 명시된 바와 같이이 메서드를 호출하려면 적어도 읽기 권한이 있어야합니다.

+0

내가하고있다 var temp = registryKey.GetAccessControl(); 하지만 임시적으로 읽거나 쓰는 것에 가치가 있지 않습니까? –

+0

var temp = registryKey.GetAccessControl(). AccessRightType –

0

사용자는 "전체 레지스트리"를 편집 할 수있는 권한이 없어야하며 레지스트리 내의 특정 키를 편집 할 수있는 권한 만 있으면됩니다.

당신은 시도 캐치 시스템

try{ 
    // Do registry edit 
} 
catch { 
    Console.Log("Sorry you don't have permission to edit this key"); 
} 

각 사용자가 다른 어떤 부분, 모든 부분 또는 윈도우 ACL을 사용하여 레지스트리의 어떤 부분에 액세스 할 수 있습니다 일을 가장 좋은 것입니다.

여기에서 first answer을 확인하십시오.

1
try{ 
    Registry.CurrentUser.OpenSubKey(@"PATH\TO\STUFF", true); 
    // Have write permissions. 
} 
catch { 
    // Do not have write permissions. 
} 
관련 문제