2009-03-30 4 views
1

내 프로그램이 'HKEY_LOCAL_MACHINE'에있는 레지스트리 키 내의 값을 편집 할 수있게하고 싶습니다.Vista + VB.NET - HKEY_LOCAL_MACHINE에 쓰는 동안 액세스가 거부되었습니다.

 My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\XYZ", "MyValue", "MyData") 

위의 내용은 Windows XP에서는 잘 작동하지만 Vista에서는 UnauthorizedAccessException이 발생합니다.

+0

밑에 신청 : 일어날 일들이 있습니다. – belgariontheking

답변

8

Vista의 UAC 기능을 사용하고 있습니다. 관리 권한으로 실행하지 않기 때문에 HKLM 하이브의 임의의 위치에 쓸 수 없습니다.

  1. 다른 장소, 아마 HKCU를 선택 (관리의 권한이있는 계정으로 프로그램을 실행하는 것보다 다른) 관리의 권한으로 프로그램을 실행하여이 문제를 해결하는 방법은 두 가지에가 있습니다

    데이터 저장

두 번째 옵션은 응용 프로그램이 항상 사용자가 가질 수있는 관리자가 아닌 권한으로 실행할 수 있기 때문에 훨씬 좋습니다.

다음은 UAC에 대한 자세한 기사입니다. 100 % 프로그래밍 자료는 아니지만 정확하게 무엇인지에 대한 좋은 설명을 제공하고 사용자의 특정 프로그램에이 정보를 관련시킬 수 있습니다. http://technet.microsoft.com/en-us/library/cc709691.aspx

+0

XP에서 정상적으로 실행 되었기 때문에 관리자 권한으로 실행 중이었습니다. 기본적으로 사용자는 HKLM에 쓸 수 없습니다. 제 생각에는 프로세스가 Admin 토큰이 제거 된 상태로 실행되고 있다는 것입니다. 따라서 프로세스는 사용자 권한으로 실행됩니다. –

+0

@Rob, 문구를 조금 더 명확하게하려고 시도했습니다. – JaredPar

+0

이 답변을 완료하려면 "관리자 권한으로 프로그램 실행"에 대한 예 : http://www.sevenforums.com/tutorials/11841-run-administrator .html –

-1

Vista는 관리자 계정에 대해보다 엄격한 제한을가집니다. 관리자 계정으로 로그인하지 않은 경우 HKEY_LOCAL_MACHINE과 반대로 HKEY_CURRENT_USER에 작성해야합니다.

IMO,이 의미가 있습니다. 각 사용자는 자신의 프로그램에 대해 자신 만의 설정/등을 가지고 있습니다. 프로그램의 전체 설정을 으로하고 싶다면 관리자 계정으로해야합니다.

+0

Vista와 마찬가지로 관리자 계정에 더 엄격한 제한이 있으며 특히 관리자 액세스 권한이있는 관리자로 앱을 실행하게합니다. – crashmstr

+0

@ crashmstr : 예. – belgariontheking

2

로컬 시스템 하이브를 변경하면 시스템 전체에 영향을 미칠 수 있으므로 관리자가 아닌 사용자 만 변경할 수 있습니다. 관리자가 아닌 XP 시스템에서 동일한 코드를 실행하려고하면 같은 오류가 발생합니다. Vista에서 프로세스가 기본적으로 관리자가 아니기 때문에이 오류가 발생합니다. 이에 대한 정보는 "Made for Windows 2000", "Made for Windows XP"및 "Made for Windows Vista"인증 지침에 나와 있습니다.

프로그램에서 수행하는 작업에 대한 정보가 거의 없으므로 특정 지침을 제공하기 위해 더 많은 정보가 필요할 수 있으므로 일반적으로 이야기하겠습니다. 필요한 경우를 제외하고 응용 프로그램을 로컬 시스템 하이브에서 나가기를 원합니다. 프로그램이 비 관리자 모드에서 실행될 때 이러한 관리 키에 대한 액세스가 필요한 기능을 비활성화하거나 관리자에게 priv를 요청할 수 있습니다.