2012-02-17 6 views
1

C#을 사용하여 프로그래밍 방식으로 레지스트리 값을 읽는 데 문제가 있습니다. 많은 사이트를 조사했지만 도움이되지 않았습니다. 대성 모드로 VS를 실행할 때 레지스트리에 액세스하여 읽을 수 있지만 승격 모드로 VS를 실행하면 문제가 발생합니다. 처음에 나는이 상승 된 모드 괜찮 았는데 아래 코드프로그래밍 방식으로 레지스트리에 액세스하는 중 문제가 발생했습니다.

byte[] val = (byte[])Registry.GetValue("HKEY_LOCAL_MACHINE\\Software\\MyServices\\Identity\\ASPNET_SETREG", "ValueName", 0); 

시작하지만, 비 상승 모드에 실패합니다. 함수 위에 속성을 배치했습니다.

[RegistryPermissionAttribute(SecurityAction.Demand,Unrestricted=true)] 

이것은 도움이되지 않았습니다. 그런 다음 시도했습니다

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, Flags = System.Security.Permissions.SecurityPermissionFlag.AllFlags)] 

여전히 작동하지 않았습니다. 가 지금은

RegistryKey key = Registry.LocalMachine;    


     RegistrySecurity rs = new RegistrySecurity(); 
     rs = key.GetAccessControl(); 
     string user = "DomainName\\Username"; 
     rs.AddAccessRule(new RegistryAccessRule(user, 
     RegistryRights.ReadKey, 
     InheritanceFlags.None, 
     PropagationFlags.None, 
     AccessControlType.Allow)); 


     key.SetAccessControl(rs);//Exception: "Attempted to perform an unauthorized operation."} 
     //RegistryKey key2 = key.OpenSubKey("Software\\MyServices\\Identity\\ASPNET_SETREG"); 
     //RegistryKey key2 = key.OpenSubKey("Software\\MyServices\\Identity\\ASPNET_SETREG", false); 
     //RegistryKey key2 = key.OpenSubKey("Software\\MyServices\\Identity\\ASPNET_SETREG", RegistryKeyPermissionCheck.ReadSubTree); 
     RegistryKey key2 = key.OpenSubKey("Software\\MyServices\\Identity\\ASPNET_SETREG", RegistryKeyPermissionCheck.ReadSubTree, RegistryRights.ReadPermissions); 

이 SetAccessControl을 언급하고 OpenSubkey 옵션 중 하나를 사용하여 ... 아래의 코드를 시도, 나는 예외를 얻을 : "요청한 레지스트리에 액세스 할 수 없습니다."

나는 괴롭혀 계속 진행할 수 없습니다. 도와주세요

+0

'regedit'을 사용하여 문제의 레지스트리 키로 이동해보십시오. 키를 마우스 오른쪽 단추로 클릭하고 _Permissions_ 옵션을 선택하십시오. – LiquidPony

+0

언급을 잊어 버렸습니다. – Murthy

+0

이상하게도 Creater Owner는 모든 권한이나 읽기 권한을 갖고 있지는 않지만 시스템, 관리자 및 사용자는 모든 권한과 읽기 권한을 가지고 있습니다. 제작자 소유자는 특별한 권한 만 갖고 있습니다. 그래서 클릭 고급 ... 권한 탭에서, 나는 창조주의 소유자에 대한 권한이 하위 키에만 적용되지만, 다른 사람의 권한은이 키와 하위 키에 적용됩니다! 이것은 나를 놀라게한다! – Murthy

답변

1
private RegistryKey keyR = Registry.CurrentUser.OpenSubKey("Software\\YourKey",true); 
private RegistryKey keyW = Registry.CurrentUser.CreateSubKey("Software\\YourKey"); 

public string version 
{ 
    get { return keyR.GetValue("VERSION", "", RegistryValueOptions.DoNotExpandEnvironmentNames).ToString(); } 
    set { keyW.SetValue("VERSION", value, RegistryValueKind.String); } 
} 

나는이 방법으로 windows 레지스트리를 사용하고 있습니다. 문제가 없습니다 ...

+0

순간에 OpenSubkey가 나옵니다. 예외! – Murthy

+0

이 방법을 시도'Registry.CurrentUser.OpenSubKey ("Software \\ YourKey", true);' – Alex

+0

너희들은 목표를 약간 벗어났다. 문제는 일반적으로 레지스트리에 접근하는 것과는 다르다. 두 가지 방법 모두 잘 작동한다. 문제는 레지스트리가 파일 시스템 일 뿐이고 다른 파일 시스템과 마찬가지로 특정 부분에 대한 액세스를 제한합니다. – antiduh

1

Windows 레지스트리는 기본적으로 구조화 된 파일 시스템이며 키와 값에 대한 사용 권한이 있습니다.

...\MyServices\ 또는 그보다 깊은 키에 권한이 올바르게 설정되어 있지 않으므로 권한이없는 프로세스의 권한에 액세스 할 수있는 권한이 없습니다.

하나 : 당신이 모든 사람에 의해 그들을 읽을 수 있도록 권한을 변경해야하므로

  1. 그 키는, 사람이 읽을 수 있어야합니다. 또는 -
  2. 이러한 키는 정당한 이유로 제한되어 있으므로 누구나 읽을 수 없어야합니다.이 경우 프로그램은 항상 상승 된 상태로 실행되어야합니다.
관련 문제