C#을 사용하여 Windows의 UAC 수준을 가장 낮게 설정하려면 레지스트리 값을 변경해야 합니다. 그러나 이는 보안상 위험할 수 있으며 관리자 권한이 필요합니다.
1. 레지스트리를 변경하여 UAC 수준 낮추기
UAC 설정은 다음 레지스트리 키에 저장되어 있습니다:
경로:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
중요한 값:
• "EnableLUA" (DWORD)
• 1: UAC 활성화 (기본값)
• 0: UAC 완전히 비활성화 (재부팅 필요)
• "ConsentPromptBehaviorAdmin" (DWORD)
• 2: 바탕화면이 흐려지고 UAC 프롬프트 표시 (기본값)
• 0: 자동으로 “예” 선택 (권장되지 않음)
C# 코드: UAC를 가장 낮게 설정
using System;
using Microsoft.Win32;
class Program
{
static void Main()
{
try
{
// 관리자 권한 확인
if (!IsAdministrator())
{
Console.WriteLine("이 프로그램은 관리자 권한이 필요합니다.");
return;
}
// 레지스트리 키 경로
string keyPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System";
// 레지스트리 변경
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath, true))
{
if (key != null)
{
key.SetValue("EnableLUA", 0, RegistryValueKind.DWord); // UAC 완전 비활성화
key.SetValue("ConsentPromptBehaviorAdmin", 0, RegistryValueKind.DWord); // UAC 프롬프트 자동 승인
Console.WriteLine("UAC 수준을 가장 낮게 설정했습니다. 재부팅 후 적용됩니다.");
}
else
{
Console.WriteLine("레지스트리 키를 찾을 수 없습니다.");
}
}
}
catch (Exception ex)
{
Console.WriteLine("오류 발생: " + ex.Message);
}
}
static bool IsAdministrator()
{
var identity = System.Security.Principal.WindowsIdentity.GetCurrent();
var principal = new System.Security.Principal.WindowsPrincipal(identity);
return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
}
}
2. 관리자 권한으로 실행 필요
이 프로그램을 실행할 때 관리자 권한이 필요합니다.
관리자 권한으로 실행하도록 설정하는 방법
1. app.manifest 파일을 생성하고 다음 코드를 추가합니다:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
2. 프로젝트를 다시 빌드하면 관리자 권한을 요청하는 UAC 프롬프트가 나타납니다.
3. 적용 후 재부팅 필요
UAC 설정을 변경하면 반드시 시스템을 재부팅해야 적용됩니다.
C#에서 Windows를 자동으로 재부팅하는 방법:
System.Diagnostics.Process.Start("shutdown", "/r /t 0");
주의사항
• 보안 위험: UAC를 완전히 끄면 악성코드 실행 위험이 커집니다.
• 일부 프로그램 호환성 문제: UAC가 꺼진 상태에서 특정 프로그램이 정상 작동하지 않을 수 있습니다.
• 기업 환경에서는 GPO 정책에 의해 차단될 수 있음
• UAC를 다시 활성화하려면 "EnableLUA" 값을 1로 변경 후 재부팅해야 합니다.
결론
위 코드를 실행하면 UAC가 완전히 비활성화되며, UAC 프롬프트 없이 프로그램이 실행됩니다. 그러나 보안 위험이 크므로 작업 스케줄러 등을 이용한 우회 방법을 추천합니다.
'Tech > c#' 카테고리의 다른 글
.NET과 C#의 차이 (1) | 2025.03.17 |
---|---|
C# WinForms에서 app.manifest를 사용하여 UAC 프롬프트 없이 자동으로 관리자 권한으로 실행 (0) | 2025.03.04 |
C# 윈도우OS 표시언어 확인하기 (1) | 2025.02.21 |
C# - DateTimePicker 날짜와 시간 (1) | 2020.09.15 |
c# - datagridview 마지막 행 없애기 (0) | 2020.07.18 |
댓글