개발 중 높은 권한을 요구하는 작업이 필요한 경우, Visual Studio를 관리자 권한으로 실행하거나, WPF 애플리케이션을 항상 관리자 권한으로 실행되도록 설정해야 할 때가 있습니다. 이번 글에서는 Visual Studio 2022와 .NET 8 환경에서 이러한 설정을 적용하는 방법입니다.
Visual Studio 에서 관리자 권한으로 컴파일 / 실행하는 방법
Visual Studio를 관리자 권한으로 실행하기
간단한 방법으로 Visual Studio 자체를 관리자 권한으로 실행하면 Visual Studio에서 개발 중인 S/W 또한 관리자 권한으로 실행되게 됩니다.
(1) 한 번만 관리자 권한으로 실행하기
- 시작 메뉴를 엽니다.
- Visual Studio 아이콘을 찾아 마우스 오른쪽 버튼을 클릭합니다.
- [관리자 권한으로 실행]을 선택하여 실행합니다.
(2) 항상 관리자 권한으로 실행되도록 설정하기
- Visual Studio 아이콘을 마우스 오른쪽 버튼으로 클릭하고 [속성]을 선택합니다. - (1) 번에서 속성
- [바로 가기] 탭에서 [고급] 버튼을 클릭합니다.
- [관리자 권한으로 실행] 옵션을 체크한 뒤 확인을 누릅니다.
이렇게 설정하면 Visual Studio를 실행할 때마다 자동으로 관리자 권한이 활성화됩니다.
하지만 관리자 권한으로 개발하는 것은 권장되지 않는 사항이기 때문에 프로젝트 성격 상 관리자 권한이 항상 필요하다면 아래 방법이 더 나을 것 같습니다.
WPF 애플리케이션을 항상 관리자 권한으로 실행되도록 설정하기
개발한 애플리케이션이 관리자 권한 없이 실행되면 일부 작업(예: 파일 시스템 변경, 레지스트리 수정 등)에서 정상적인 동작을 하지 않을 수 있습니다. 제 경우에는 WINAPI를 사용하는데 무시되는 현상이 있어서 관리자 권한으로 개발 중입니다. 이를 방지하려면 애플리케이션에 매니페스트를 추가해야 합니다.
Visual Studio 2015 로 개발할 때 이후로 처음인데 UI가 조금 변경된 것 외에 크게 바뀐 점은 없네요.
프로젝트에 manifest 파일을 추가합니다.
manifest 파일을 수정합니다.
<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 부분을
아래와 같이 수정합니다.
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
전체 코드
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC 매니페스트 옵션
Windows 사용자 계정 컨트롤 수준을 변경하려면
requestedExecutionLevel 노드를 다음 중 하나로 바꿉니다.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
requestedExecutionLevel 요소를 지정하면 파일 및 레지스트리 가상화를 사용하지 않습니다.
이전 버전과의 호환성을 위해 애플리케이션에 가상화가 필요한 경우
이 요소를 제거합니다.
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
<defaultAssemblyRequest permissionSetReference="Custom" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- 이 애플리케이션이 테스트되고 함께 작동하도록 설계된 Windows 버전
목록입니다. 해당 요소의 주석 처리를 제거하면 Windows에서
호환 가능성이 가장 큰 환경을 자동으로 선택합니다. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- 애플리케이션이 DPI를 인식하며 높은 DPI에서 Windows가 자동으로 스케일링하지
않음을 나타냅니다. WPF(Windows Presentation Foundation) 애플리케이션은 자동으로 DPI를 인식하며
옵트인할 필요가 없습니다. 이 설정에 옵트인한 .NET Framework 4.6을 대상으로 하는
Windows Forms 애플리케이션은 app.config에서 'EnableWindowsFormsHighDpiAutoResizing' 설정도 'true'로 설정해야 합니다.
애플리케이션이 긴 경로를 인식하도록 설정합니다. https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation을 참조하세요. -->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
-->
<!-- Windows 공용 컨트롤 및 대화 상자의 테마 사용(Windows XP 이상) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>
위에서 수정한 manifest 파일을 설정합니다.
컴파일 및 실행을 하면
이렇게 Visual Studio를 재시작하면서 관리자 권한으로 변경됩니다.
Visual Studio 에서 관리자 권한으로 컴파일 / 실행하는 방법 - 끝