programing

.NET 응용 프로그램을 관리자로 실행하려면 어떻게 해야 합니까?

skycolor 2023. 5. 27. 09:59
반응형

.NET 응용 프로그램을 관리자로 실행하려면 어떻게 해야 합니까?

프로그램을 클라이언트 컴퓨터에 설치한 후 Windows 7(윈도우 7)에서 프로그램을 관리자로 실행하려면 어떻게 해야 합니까?

프로그램에 포함된 매니페스트를 수정할 수 있습니다.이 기능은 Visual Studio 2008 이상에서 작동합니다. 프로젝트 + 새 항목 추가, "응용 프로그램 매니페스트 파일"을 선택합니다.변할내용을 합니다.<requestedExecutionLevel>요소:

 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

사용자가 프로그램을 시작하면 UAC 프롬프트가 표시됩니다.현명하게 사용하세요; 그들의 인내심은 빠르게 닳을 수 있습니다.

추가requestedExecutionLevel매니페스트의 요소는 전투의 절반에 불과합니다. UAC를 끌 수 있다는 것을 기억해야 합니다.만약 그렇다면, 당신은 이전 통학 방식을 확인하고 사용자가 관리자가 아닌 경우 오류 대화상자를 표시해야 합니다.
(스레드를 호출합니다.)CurrentPrincipal).

자세한 단계는 다음과 같습니다.

  1. 프로젝트에 응용 프로그램 매니페스트 파일 추가
  2. 응용 프로그램 설정을 "app.manifest"로 변경
  3. "요청됨" 태그실행관리자가 필요한 수준"입니다.

솔루션에서 파일 추가

응용 프로그램 매니페스트 파일 선택

매니페스트 옵션 선택

매니페스트 파일 업데이트

이 코드를 사용하여 ClickOnce의 보안 설정을 해제해야 합니다. 이를 위해서는 Properties -> Security -> ClickOnce Security 안으로 들어가십시오.

수동으로 수행하기 위해 몇 가지 코드를 구현했습니다.

using System.Security.Principal;
public bool IsUserAdministrator()
{
    bool isAdmin;
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (UnauthorizedAccessException ex)
    {
        isAdmin = false;
    }
    catch (Exception ex)
    {
        isAdmin = false;
    }
    return isAdmin;
}

EXE 파일에 매니페스트 파일을 포함할 수 있으므로 Windows(7 이상)에서 항상 관리자 권한으로 프로그램을 실행합니다.

6단계: 응용 프로그램 매니페스트(UAC) 생성포함(MSDN)에서 자세한 내용을 확인할 수 있습니다.

Visual Studio 2008에서 오른쪽 합니다.Project -> Add New Item그리고 선택했습니다.Application Manifest File.

파일에 태그가 .requestedExecutionLevel레벨을 세 가지 값으로 설정할 수 있습니다.

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

OR

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

OR

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

응용프로그램이 관리자로 실행되도록 설정하려면 중간 응용프로그램을 선택해야 합니다.

코드에서만 이를 수행하는 또 다른 방법은 @NG의 답변에서와 같이 프로세스가 관리자로 실행되고 있는지 여부를 감지하는 것입니다.그런 다음 응용프로그램을 다시 열고 현재 응용프로그램을 닫습니다.

응용 프로그램이 서비스로 설치되는 경우와 같이 특정 조건에서 실행될 때만 관리자 권한이 필요할 때 이 코드를 사용합니다.따라서 다른 답변처럼 항상 관리자로 실행할 필요는 없습니다.

아래 코드의 참고 사항NeedsToRunAsAdmin는 현재 상태에서 관리자 권한이 필요한지 여부를 탐지하는 방법입니다.만약 이것이 다시 돌아온다면,false코드가 스스로 상승하지 않습니다.이는 다른 접근 방식에 비해 이 접근 방식의 주요 이점입니다.

이 코드는 위에서 언급한 장점이 있지만 항상 원하는 것은 아닌 새로운 프로세스로 다시 시작해야 합니다.

private static void Main(string[] args)
{
    if (NeedsToRunAsAdmin() && !IsRunAsAdmin())
    {
        ProcessStartInfo proc = new ProcessStartInfo();
        proc.UseShellExecute = true;
        proc.WorkingDirectory = Environment.CurrentDirectory;
        proc.FileName = Assembly.GetEntryAssembly().CodeBase;

        foreach (string arg in args)
        {
            proc.Arguments += String.Format("\"{0}\" ", arg);
        }

        proc.Verb = "runas";

        try
        {
            Process.Start(proc);
        }
        catch
        {
            Console.WriteLine("This application requires elevated credentials in order to operate correctly!");
        }
    }
    else
    {
        //Normal program logic...
    }
}

private static bool IsRunAsAdmin()
{
    WindowsIdentity id = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(id);

    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}

에 따라

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

응용프로그램 매니페스트가 없거나 추가 방법을 모르는 경우 응용프로그램 매니페스트를 추가할 수 있습니다.일부 프로젝트는 별도의 매니페스트 파일을 자동으로 추가하지 않으므로 먼저 프로젝트 속성으로 이동하고 응용 프로그램 탭으로 이동하여 프로젝트가 탭 하단의 매니페스트를 제외하고 있지 않은지 확인합니다.

  • 다음, 프로젝트를 마우스 오른쪽 버튼으로 클릭합니다.
  • 새 항목 추가
  • 마지막으로 응용프로그램 매니페스트 파일을 찾아서 클릭합니다.

Visual Studio 2010에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭합니다."Windows 설정 보기"를 누르면 "app.manifest"라는 파일이 생성되고 열립니다.이 파일에서 설명된 대로 "invoker로"를 "require Administrator"로 바꿉니다.

ClickOnce 보안 설정을 사용하여 매니페스트를 만든 다음 비활성화할 수 있습니다.

Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings

클릭한 후 프로젝트의 속성 폴더인 app.manifest 아래에 파일이 생성되면 해당 파일을 선택 취소할 수 있습니다.Enable ClickOnce Security Settings선택

해당 파일을 열고 다음 행을 변경합니다.

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

대상:

 <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

이렇게 하면 프로그램에 관리자 권한이 필요합니다.

이렇게 하면 응용 프로그램이 관리자 역할을 하지 않습니다.
의 @NG에 의한 이 답변의 단순화된 버전입니다.

public bool IsUserAdministrator()
{
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch
    {
        return false;
    }
}

어떤 이유로 코드 전용 솔루션이 필요한 경우 독립 실행형 클래스 파일이 있습니다.그냥 "Admin Relauncher"를 불러주세요.애플리케이션 시작 시 IfNotAdmin()"을 다시 실행합니다.

using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;

public static class AdminRelauncher
{
    public static void RelaunchIfNotAdmin()
    {
        if (!RunningAsAdmin())
        {
            Console.WriteLine("Running as admin required!");
            ProcessStartInfo proc = new ProcessStartInfo();
            proc.UseShellExecute = true;
            proc.WorkingDirectory = Environment.CurrentDirectory;
            proc.FileName = Assembly.GetEntryAssembly().CodeBase;
            proc.Verb = "runas";
            try
            {
                Process.Start(proc);
                Environment.Exit(0);
            }
            catch (Exception ex)
            {
                Console.WriteLine("This program must be run as an administrator! \n\n" + ex.ToString());
                Environment.Exit(0);
            }
        }
    }

    private static bool RunningAsAdmin() 
    {
        WindowsIdentity id = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(id);

        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
}

언급URL : https://stackoverflow.com/questions/2818179/how-do-i-force-my-net-application-to-run-as-administrator

반응형