2014-10-07 4 views
2

내가 응용 프로그램이 관리자 권한으로 실행 0, 에 "EnableLUA"키를 변경하는 C# 응용 프로그램을 생성하고, 오류가 팝업되지 :UAC를 프로그래밍 방식으로 사용하지 않도록 설정 - 변경 사항이 적용되지 않습니까?

//Runs with admin rights 
try 
{ 
RegistryKey key = 
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System", true); 
      key.SetValue("EnableLUA", "0"); 
      key.Close(); 
} 
catch(Exception e) 
{ 
    MessageBox.Show("Error: " + e); 
} 

실제로 1에서 0으로 변경됩니다 레지스트리 키, 컴퓨터를 다시 시작한 후에도 UAC는 계속 활성화됩니다. 그런 다음 제어판> 사용자 계정 컨트롤로 이동하면 슬라이더가 끝까지 내립니다. "저장"을 누르면 (아무 것도 수정하지 않은 채로) 갑자기 UAC가 비활성화 된 것처럼 보입니다.

이것은 일종의 버그일까요 아니면 별난 종류의 보안일까요? 이 주위에 어떤 방법이 있습니까?

답변

3

UAC는 프로그래밍 방식으로 비활성화 할 수 없으며 그러한 행위를 방지하도록 설계되었습니다. UAC의 요점은 사용자 상호 작용 이외의 다른 기능을 사용하지 못하게하는 것입니다.

물론, 레지스트리 키를 0으로 설정할 수 있으며 슬라이더가 이동 한 것을 볼 수 있지만 실제로 사용자가 해당 작업을 일으키는 경우 (확인으로 커밋) 업데이트하지 않습니다.

UAC는 낮은 수준의 OS에서 작동하므로 UAC를 비활성화 할 수 있도록 커널 수준에서 코드를 실행해야하며 관리자 권한으로는 충분하지 않습니다. 그리고 현대의 BIOS에서 Execute Disable Bit는 어떤 종류의 방법 (예 : 버퍼 오버 플로우)으로도 코드가 커널에 주입되는 것을 막습니다.

더 나은 해결책은 UAC가 활성화되어 있는지 감지하고이를 켜는 방법을 사용자에게 지시하는 것입니다 떨어져서.

프로그래밍 방식으로 화면을 열어 uac를 비활성화하고 마우스 입력을 시뮬레이션하여 슬라이더를 아무 것도 클릭하지 않고 확인을 클릭하십시오.

+0

덕분에, 나는 관리자 권한으로이 가능해야한다고 생각하지만, 그렇지가 나타납니다. UAC 창을 열고 Tab 키를 두 번 누른 다음 Enter 키를 누르면 매우 엉망이됩니다. 나는 그 사람에게 통보 할 뿐이다. – John

+0

exe의 속성 페이지에서 호환성 탭을 사용하여 항상 상승 된 상태로 실행되도록 응용 프로그램을 구성 할 수 있습니다. 또한 응용 프로그램을 실행하는 지름길을 만들 수도 있습니다. 예 : "elevate myprogramsexe.exe" 프로그램에 일종의 설치 프로그램을 제공하거나 실제 exe를 시작하는 부트 스트랩 exe로 디자인하면 해당 경로로 이동할 수 있습니다. 사용자는 UAC로부터 팝업을 받게되지만 허용되고 실행되면 상승하지 않으므로 더 이상 표시되지 않습니다. –

+0

. @ Ryios 댓글을 주셔서 감사합니다.하지만 상승 된 경우에도 응용 프로그램을 다시 시작할 때 응용 프로그램에서 UAC 프롬프트를 표시합니다. 관리자 권한으로 프로그래밍 방식으로 UAC를 비활성화 할 수 있는지 알고 싶었습니다. 이는 불가능한 것으로 보입니다. – John

0

당신은 단순히 코드의 두 라인을 작성하여 UAC 프롬프트를 제거 할 수

string UAC_key = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"; 
Registry.SetValue(UAC_key, "EnableLUA", 0);` 
관련 문제