응용 프로그램을 관리자 권한으로 시작
7102 단어 .NETFrameworkC#
소개
관리자 권한으로 응용 프로그램을 시작하려면 매니페스트 파일에 정의하는 방법이 있지만 실행 파일 아이콘에 방패가 표시됩니다.
따라서 시작시 권한을 확인하고 관리자 권한이 아닌 경우 관리자 권한으로 다시 시작하면 실행 파일에 방패가 표시되지 않고 관리자 권한을 시작할 수 있습니다.
권한 확인 및 관리자 권한으로 재부팅
권한을 확인하고 관리자 권한이 아닌 경우 별도의 프로세스로 관리자 권한을 부여하고 다시 시작하십시오.
Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
var pri = (WindowsPrincipal)Thread.CurrentPrincipal;
//管理者権限以外での起動なら、別プロセスで本アプリを起動する
if (!pri.IsInRole(WindowsBuiltInRole.Administrator))
{
var proc = new ProcessStartInfo()
{
WorkingDirectory = Environment.CurrentDirectory,
FileName = Assembly.GetEntryAssembly().Location,
Verb = "RunAs"
};
if (args.Length >= 1)
proc.Arguments = string.Join(" ", args);
//別プロセスで本アプリを起動する
Process.Start(proc);
//現在プロセス終了
return;
}
위의 프로세스를 릴리스 빌드시에만 사용할 수 있으므로 Visual Studio에서 디버깅 할 때 기존 프로세스를 유지하면서 디버깅 할 수 있습니다.
다음은 모든 소스입니다.
Program.csusing System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
using System.Threading;
class Program
{
static void Main(string[] args)
{
#if (!DEBUG)
Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
var pri = (WindowsPrincipal)Thread.CurrentPrincipal;
//管理者権限以外での起動なら, 別プロセスで本アプリを起動する
if (!pri.IsInRole(WindowsBuiltInRole.Administrator))
{
var proc = new ProcessStartInfo()
{
WorkingDirectory = Environment.CurrentDirectory,
FileName = Assembly.GetEntryAssembly().Location,
Verb = "RunAs"
};
if (args.Length >= 1)
proc.Arguments = string.Join(" ", args);
//別プロセスで本アプリを起動する
Process.Start(proc);
//現在プロセス終了
return;
}
#endif
/* メインの処理 */
}
}
마지막으로
시작할 때 관리자 권한을 확인하고 다시 시작하여 매니페스트 파일을 사용하지 않고 관리자 권한으로 응용 프로그램을 시작할 수 있습니다.
Reference
이 문제에 관하여(응용 프로그램을 관리자 권한으로 시작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tada0724/items/645616a5d1deb55bfdb8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
권한을 확인하고 관리자 권한이 아닌 경우 별도의 프로세스로 관리자 권한을 부여하고 다시 시작하십시오.
Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
var pri = (WindowsPrincipal)Thread.CurrentPrincipal;
//管理者権限以外での起動なら、別プロセスで本アプリを起動する
if (!pri.IsInRole(WindowsBuiltInRole.Administrator))
{
var proc = new ProcessStartInfo()
{
WorkingDirectory = Environment.CurrentDirectory,
FileName = Assembly.GetEntryAssembly().Location,
Verb = "RunAs"
};
if (args.Length >= 1)
proc.Arguments = string.Join(" ", args);
//別プロセスで本アプリを起動する
Process.Start(proc);
//現在プロセス終了
return;
}
위의 프로세스를 릴리스 빌드시에만 사용할 수 있으므로 Visual Studio에서 디버깅 할 때 기존 프로세스를 유지하면서 디버깅 할 수 있습니다.
다음은 모든 소스입니다.
Program.cs
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
using System.Threading;
class Program
{
static void Main(string[] args)
{
#if (!DEBUG)
Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
var pri = (WindowsPrincipal)Thread.CurrentPrincipal;
//管理者権限以外での起動なら, 別プロセスで本アプリを起動する
if (!pri.IsInRole(WindowsBuiltInRole.Administrator))
{
var proc = new ProcessStartInfo()
{
WorkingDirectory = Environment.CurrentDirectory,
FileName = Assembly.GetEntryAssembly().Location,
Verb = "RunAs"
};
if (args.Length >= 1)
proc.Arguments = string.Join(" ", args);
//別プロセスで本アプリを起動する
Process.Start(proc);
//現在プロセス終了
return;
}
#endif
/* メインの処理 */
}
}
마지막으로
시작할 때 관리자 권한을 확인하고 다시 시작하여 매니페스트 파일을 사용하지 않고 관리자 권한으로 응용 프로그램을 시작할 수 있습니다.
Reference
이 문제에 관하여(응용 프로그램을 관리자 권한으로 시작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tada0724/items/645616a5d1deb55bfdb8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(응용 프로그램을 관리자 권한으로 시작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tada0724/items/645616a5d1deb55bfdb8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)