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

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

Комментарии к вопросу (4)
Решение

Вы'захотите изменить манифест, который будет встроен в программу. Это работает на Visual Studio 2008 и выше: Project + Add New Item, выберите "Application Manifest File". Измените элемент `` на:

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

Комментарии (8)

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

Комментарии (7)

Подробные шаги являются следующие.

  1. Добавить в файл манифеста приложения к решению
  2. Приложения изменить настройки, чтобы "Приложение.манифест"и
  3. Тег обновление "и requestedExecutionLevel" и значение requireadministrator.

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

Комментарии (0)

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

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;
}
Комментарии (5)

В EXE-файл можно встроить файл манифеста, который заставит Windows (7 или выше) всегда запускать программу от имени администратора.

Более подробную информацию вы найдете в Шаг 6: Создание и встраивание манифеста приложения (UAC) (MSDN).

Комментарии (0)

При работе в Visual&ампер;усилитель; nbsp;студия&ампер;усилитель; nbsp;2008, правой кнопкой мыши на проекте -и gt; Добавить новый элементи выберитеприложения файл манифеста`.

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

в <уровень=на&quot requestedExecutionLevel;значение asinvoker-то" для uiaccess=то"ложные" и />

Или

в <уровень=на&quot requestedExecutionLevel;функции requireadministrator-то" для uiaccess=то"ложные" и />

Или

в <уровень=на&quot requestedExecutionLevel;значение highestavailable-то" для uiaccess=то"ложные" и />

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

Комментарии (1)

Согласно

вы действительно хотите добавить манифест приложения, если вы Don'т уже есть один или Дон'т знаю, как, чтобы добавить один. Так как некоторые проекты не'т автоматически добавлять отдельный файл манифеста, сначала перейдите в свойства проекта, перейдите к приложения закладка и проверить, чтобы убедиться, что ваш проект не исключая проявляется в нижней части крана.

  • Далее, щелкните правой кнопкой мыши проект
  • Добавить новый элемент
  • Последнее, найдите и щелкните файл манифеста приложения
Комментарии (0)

В Visual Studio 2010 и щелкните правой кнопкой мыши имя проекта. Хит "Просмотреть настройки Windows и", это создает и открывает файл под названием "Приложение.манифест" по. В этом файле замены "ключ asinvoker-то" с "функции requireadministrator" и как это объяснено в комментарии разделов в файл.

Комментарии (1)

Другой способ сделать это в коде только, чтобы обнаружить, если процесс запущен в качестве администратора, как и в ответ на @НГ.. А затем откройте приложение снова и закрыть текущий.

Я использую этот код, когда приложение требует только права администратора при запуске, при определенных условиях, например при установке саму службу. Так что это не'т должны работать как админ все время как другие ответы тоже силой.

Обратите внимание, в NeedsToRunAsAdmin приведенный ниже код-это метод, который обнаруживает, если в нынешних условиях админ привилегии не требуется. Если это возвращает false код не будет возвышать себя. Это важное преимущество данного подхода над другим.

Хотя этот код имеет преимущества указано выше, не нужно повторно запускать себя в качестве нового процесса, который вовсе't всегда то, что вы хотите.

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);
}
Комментарии (1)

Вы можете создать манифест, используя параметры безопасности ClickOnce-приложений, а затем отключить его:

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

После нажатия, файл будет создан в рамках проекта'папку с свойства: приложение.Манифест после того, как это создается, снимите флажок Включить параметры безопасности ClickOnce-приложений

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

к:

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

Комментарии (1)

Это упрощенная версия этой ответить, выше по @НГ

public bool IsUserAdministrator()
{
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch
    {
        return false;
    }
}
Комментарии (2)

Щелкните исполняемый файл, зайти в свойства > совместимость и проверяем 'выполнять эту программу от администратора' коробка.

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

Комментарии (7)