2016-09-11 9 views
1

다음 스크립트로 레지스트리 키를 변경하려고한다고 가정 해 봅니다.C# 스크립트에 대한 권한 승격

RegistryKey myKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Company\\SomeFolder", true); 

if(myKey != null) 
{ 
    myKey.SetValue("NameXYZ", "1", RegistryValueKind.String); 
    myKey.Close(); 
} 

권한이 없기 때문에 값이 변경되지 않습니다. 레지스트리 키 값을 변경하는 한 가지 방법은 예 : 관리자 권한으로 VS를 실행 한 다음 스크립트를 실행하십시오. 그러나 C# 스크립트 (.csx)에 대해 권한 상승 된 권한을 설정 한 다음이 스크립트를 실행하는 방법이 있습니다. 정상적인 권한을 가진 VS?

+0

아니요. 스크립트 실행 방법에 따라 다릅니다. C# 대화 형 창에서 실행하는 경우 VS 상승 된 실행해야합니다. csi.exe로 수행하는 경우 매니 페스트 또는 runas가있는 권한 상승을 요청하고 csi.exe를 시작하도록하는 프로그램을 실행해야합니다. –

답변

0

Windows 운영 체제에서 고도를 요청하려면 응용 프로그램에 매니페스트를 포함시켜야합니다.

( MSDN here에서 촬영) 다음과 같이개
<?xml version="1.0" encoding="utf-8"?> 
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 

     <!-- Leave the desired execution level here -->  
     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     <requestedExecutionLevel level="highestAvailable" uiAccess="false"> 

     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

실행 수준은 정의됩니다

  • asInvoker : 그것을 시작 프로세스와 동일한 권한으로 실행됩니다 응용 프로그램입니다. 관리자 권한으로 실행을 선택하면 응용 프로그램을 높은 권한 수준으로 올릴 수 있습니다.

  • highestAvailable : 응용 프로그램은 가능한 가장 높은 권한 수준으로 실행됩니다. 응용 프로그램을 시작한 사용자가 Administrators 그룹의 구성원 인 경우이 옵션은 requireAdministrator와 동일합니다. 사용 가능한 최고 사용 권한 수준이 여는 프로세스의 수준보다 높으면 시스템에서 자격 증명을 묻는 메시지를 표시합니다.

  • 필요 관리자 : 응용 프로그램이 관리자 권한으로 실행됩니다. 응용 프로그램을 시작한 사용자는 Administrators 그룹의 구성원이어야합니다. 시작 프로세스가 관리 권한으로 실행되고 있지 않으면 시스템에서 자격 증명을 묻는 메시지를 표시합니다.

결론

레지스트리에 값을 기록하려면, 당신은 아마 매니페스트에 <requestedExecutionLevel level="requireAdministrator" />을 포함해야한다. 하지만 HKEY_LOCAL_MACHINE은 아니지만 HKEY_CURRENT_USER (this answer 참조)이라고 써야합니다.