응용 프로그램을 관리자 권한으로 시작

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.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

        /* メインの処理 */

    }
}

마지막으로



시작할 때 관리자 권한을 확인하고 다시 시작하여 매니페스트 파일을 사용하지 않고 관리자 권한으로 응용 프로그램을 시작할 수 있습니다.

좋은 웹페이지 즐겨찾기