WPF 응용 프로그램을 Administrator 모드로 강제 실행하는 방법
WPF 어플리케이션을 사용하여 로컬머신의 윈도 서비스, 태스크스케줄러에 액세스 하고 있다.이 WPF 애플리케이션을 전개하여 "관리자로서 실행" 없이 실행하면 로컬머신의 Windows 서비스 및 태스크스케줄러에 액세스할 수 없기 때문에 실패합니다."관리자로서 실행"을 사용하여 실행하면 올바르게 작동합니다.
애플리케이션을 실제 가동 환경에 도입할 때 디폴트로 관리 모드로 실행하려면 어떻게 해야 합니까?
다음 명령어를 추가해야 합니다.app.manifest
를 변경합니다.requestedExecutionLevel
부터asInvoker
로.requireAdministrator
add file 대화상자를 사용하여 새 매니페스트를 생성할 수 있습니다.관리자가 필요하도록 변경합니다.프로젝트 설정에서도 해당 매니페스트를 사용하도록 설정되어 있는지 확인하십시오.이렇게 하면 응용 프로그램을 두 번 클릭하기만 하면 자동으로 권한 상승 여부를 묻는 메시지가 표시됩니다.
상세한 것에 대하여는, 여기를 참조해 주세요.
http://msdn.microsoft.com/en-us/library/bb756929.aspx
편집: 이 기사에서는 VS 2005와mt.exe
메니페스트를 삽입할 수 있습니다.Visual studio 2008+ 를 사용하고 있는 경우는, 이 기능이 짜넣어져 있습니다.프로젝트 속성을 열면 "응용 프로그램" 탭에서 매니페스트를 선택할 수 있습니다.
- WPF 프로젝트를 오른쪽 클릭하여 새로운 아이템을 추가합니다.「 Add - > New Item ... 」"
- "응용 프로그램 매니페스트 파일"을 선택하고 추가를 클릭합니다.
- 새로 만든 매니페스트 파일을 더블 클릭하여
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
로.
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
그러면 WPF 응용 프로그램이 Administrator로 실행됩니다.
Clickonce를 해제하지 않으려면 이 코드가 최선의 해결책입니다.
using System.Security.Principal;
using System.Management;
using System.Diagnostics;
using System.Reflection;
//Put this code in the main entry point for the application
// Check if user is NOT admin
if (!IsRunningAsAdministrator())
{
// Setting up start info of the new process of the same application
ProcessStartInfo processStartInfo = new ProcessStartInfo(Assembly.GetEntryAssembly().CodeBase);
// Using operating shell and setting the ProcessStartInfo.Verb to “runas” will let it run as admin
processStartInfo.UseShellExecute = true;
processStartInfo.Verb = "runas";
// Start the application as new process
Process.Start(processStartInfo);
// Shut down the current (old) process
System.Windows.Forms.Application.Exit();
}
}
/// <summary>
/// Function that check's if current user is in Aministrator role
/// </summary>
/// <returns></returns>
public static bool IsRunningAsAdministrator()
{
// Get current Windows user
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
// Get current Windows user principal
WindowsPrincipal windowsPrincipal = new WindowsPrincipal(windowsIdentity);
// Return TRUE if user is in role "Administrator"
return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}
설립처: http://matijabozicevic.com/blog/wpf-winforms-development/running-a-clickonce-application-as-administrator-also-for-windows-8
WPF 애플리케이션을 관리자 모드로 실행하는 순서
1. 솔루션 탐색기를 엽니다.
2. 솔루션 상에서 오른쪽 클릭 --> 추가 --> 새 아이템 --> 앱.매니페스트----> OK
3. Manifest 파일을 다음과 같이 편집합니다.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
(종료)
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
4. 매니페스트 파일 편집 후 Goto Solution 프로젝트(RightCLick) ----> 속성 ----> 보안
[클릭 원스 보안 설정 활성화]체크박스를 켜겠습니다
- 애플리케이션을 실행하고 설정을 가져옵니다.관리자로서 실행 모드가 설정된 애플리케이션이 실행됩니다.
csWPF App.xaml.cs
현재 애플리케이션 프로세스에서는 관리자가 실행할 때 실행되는 새로운 프로세스와 동일한 애플리케이션이 중지됩니다.
public partial class App : Application
{
//This function will be called on startup of the applications
protected override void OnStartup(StartupEventArgs e)
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
if (principal.IsInRole(WindowsBuiltInRole.Administrator) == false && principal.IsInRole(WindowsBuiltInRole.User) == true)
{
ProcessStartInfo objProcessInfo = new ProcessStartInfo();
objProcessInfo.UseShellExecute = true;
objProcessInfo.FileName = Assembly.GetEntryAssembly().CodeBase;
objProcessInfo.UseShellExecute = true;
objProcessInfo.Verb = "runas";
try
{
Process proc = Process.Start(objProcessInfo);
Application.Current.Shutdown();
}
catch (Exception ex)
{
}
}
}
}
언급URL : https://stackoverflow.com/questions/5276674/how-to-force-a-wpf-application-to-run-in-administrator-mode
'programing' 카테고리의 다른 글
TSQL 변수를 일정하게 하는 방법이 있습니까? (0) | 2023.04.17 |
---|---|
한 목록의 모든 값을 다른 목록에서 제거하시겠습니까? (0) | 2023.04.17 |
PyWin32를 시작하려면 어떻게 해야 하나요? (0) | 2023.04.17 |
DLL 의존성을 확인하는 방법 (0) | 2023.04.17 |
TableView용 NSIndexPath 작성 방법 (0) | 2023.04.17 |