Настройка прав администратора UAC в программах

      UAC (User Account Control) — технология контроля учетных записей, появившаяся впервые в Windows Vista и старше. Данная технология запрещает программам выполнять действия, требующие права администратора. При выполнении программой таких действий, ее работа приостанавливается и пользователю выдается окно с запросом на защищенном рабочем столе (для того, чтобы невозможно было нажать программно кнопку ОК). К примеру, если вашей программе потребуется внести изменения в раздел реестра HKEY_LOCAL_MACHINE, то ей потребуются права администратора.
      Для решения данной проблемы можно воспользоваться внедрением в проект файла манифеста, который операционная система будет считывать и автоматически определять необходимые для запуска параметры.

      Рассмотрим внедрение файла манифеста, в приложение «Windows Form». Для этого откройте Visual Studio(в данном примере используется версия 2012) и создайте проект «Windows Form». Откройте «Solution Explorer» (Обозреватель решений), который обеспечивает упорядоченное представление проектов и их файлов, перейдите в меню «Вид» - «Обозреватель решений». Выполните клик правой клавишей мыши в «Обозревателе решений» по имени проекта и выберите из контекстного меню, пункт «Добавить» - «Создать элемент…».
      У вас откроется новое окно «Добавление нового элемента - …» найдите элемент Visual С# с именем «Файл манифеста приложения», выберете его и нажмите кнопку «Добавить».
      В «Обозревателе решений» у вас появится новый пункт с именем файла манифеста. Так же он будет автоматически открыт в редакторе кода.
      Для настройки прав необходимых для выполнения приложения требуется определить уровень безопасности и описать элемент «requestedExecutionLevel». Этот элемент не имеет дочерних элементов и имеет следующие атрибуты:
1) Level - Обязательный. Устанавливает уровень безопасности, требуемый приложению. Для данного атрибута доступны следующие значения:

  • asInvoker - приложение запускается с правами процесса-родителя. Это означает, что если выполняется запуск программы из приложения, которое уже запущено с правами администратора, то она автоматически будет иметь те же права. Этот режим рекомендуется Microsoft в большинстве случаев. Т.е. это те программы, которые не требуют прав администратора;
  • highestAvailable — приложение запускается с более высокими правами, чем имеет текущий пользователь. С такими правами запускаются Regedit.exe, Mmc.exe;
  • requireAdministrator — запрашиваются полные права администратора. Т.е. требуются для приложений, которые не могут работать без прав администратора.
      Установка приложений «ClickOnce» возможна только при значении «asInvoker». При любом другом значении установка будет невозможна.
2) uiAccess - Необязательный. Указание того, требует ли приложение доступ к защищенным элементам пользовательского интерфейса для реализации специальных возможностей. Доступны значения "true" и "false", по умолчанию используется значение "false". Значение "true" должны иметь только подписанные приложения и запускалась из папок "\Program Files\" и "\windows\system32\". Чаще всего, в этом нет необходимости.
      Для того чтобы программа при запуске требовала повышение прав до уровня Администратора, заменим в атрибуте «Level» значение по умолчанию «asInvoker» на «requireAdministrator».

      Выполните построение решения, нажав на клавишу «F6». Если вы все сделали правильно, то в операционных системах Windows Vista и старше, на иконке исполняемого файла программы появится значок щита, означающий, что данной программе требуется повышение прав.
      Для проверки прав вашего приложения вы можете воспользоваться приведенным ниже листингом.
string s = new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator) ? "Администратор" : "Обычный пользователь";
Если у вас консольное приложение, то для него принцип действий такой же.

Комментариев нет:

Отправить комментарий

Большая просьба, не писать в комментариях всякую ерунду не по теме!