сборки - сборка c#




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

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


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


Во время работы над 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" />

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


Вы можете создать манифест с помощью параметров безопасности 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" />

Это заставит программу требовать права администратора.


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


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

  1. Добавить файл манифеста приложения в решение
  2. Измените настройку приложения на "app.manifest"
  3. Обновить тег «requestExecutionLevel» для requireAdministrator.

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


Согласно

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

вам нужно добавить манифест приложения, если у вас его еще нет или вы не знаете, как его добавить. Поскольку некоторые проекты автоматически не добавляют отдельный файл манифеста, сначала перейдите к свойствам проекта, перейдите на вкладку « Приложение » и убедитесь, что ваш проект не исключает манифест в нижней части крана.

  • Затем щелкните правой кнопкой мыши проект
  • Добавить новый элемент
  • Наконец, найдите и нажмите Файл манифеста приложения

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

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

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

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






elevated-privileges