Как я могу заставить my.NET приложение для запуска от имени администратора?



Как только моя программа установлена на клиентской машине, как заставить мою программу работать от имени администратора в Windows 7?

746   12  

12 ответов:

вы хотите изменить манифест, который будет встроен в программу. Это работает на Visual Studio 2008 и выше: проект + Добавить новый элемент, выберите "файл манифеста приложения". Измените <requestedExecutionLevel> элемент to:

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

пользователь получает UAC запрос при запуске программы. Используйте мудро; их терпение может быстро изнашиваться.

добавлять requestedExecutionLevel элемент вашего манифеста - это только половина битвы; вы должны помнить, что UAC можно отключить. Если это так, вы должны выполнить проверку по старой школе и создать диалоговое окно с ошибкой, если пользователь не является администратором
(вызов IsInRole(WindowsBuiltInRole.Administrator) на вашем потоке CurrentPrincipal).

я реализовал код, чтобы сделать это вручную:

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

подробные шаги заключаются в следующем.

  1. Добавить файл манифеста приложения к решению
  2. изменить настройки приложения на " приложение.манифест"
  3. обновить тег "requestedExecutionLevel" для requireAdministrator.

Adding file in Solution

Select Application Manifest File

Select Manifest option

Update Manifest file

обратите внимание, что с помощью этого кода вам нужно отключите параметры безопасности ClickOnce, для этого перейдите в свойства - > безопасность - > безопасность ClickOnce

во время работы над Visual Studio 2008 щелкните правой кнопкой мыши на Project -> Add New Item и выберите Application Manifest File.

в файле манифеста, вы найдете тега requestedExecutionLevel, и вы можете установить уровень трех значений:

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

или

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

или

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

чтобы установить приложение для запуска от имени администратора,вы должны выбрать средний.

в Visual Studio 2010 щелкните правой кнопкой мыши имя проекта. Нажмите "Просмотр настроек Windows", это создает и открывает файл под названием " Приложение.проявляться." В этом файле замените "asInvoker "на" requireAdministrator", как описано в комментариях в файле.

по состоянию на

<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);
}

это упрощенная версия this ответ

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

вы можете создать манифест с помощью параметров безопасности ClickOnce, а затем отключить его:

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

после того, как вы щелкнули его, файл будет создан в папке свойств проекта под названием приложение.манифест как только это будет создано, вы можете снять Enable ClickOnce Security Settings опции

Откройте этот файл и измените эту строку :

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

to:

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

это сделает программу требует прав администратора.

щелкните правой кнопкой мыши исполняемый файл, перейдите в раздел Свойства > совместимость и установите флажок "запустить эту программу от имени администратора".

Если вы хотите запустить его как администратор для всех пользователей, сделайте то же самое в "Изменить настройки для всех пользователей".

Comments

    Ничего не найдено.