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 — запрашиваются полные права администратора. Т.е. требуются для приложений, которые не могут работать без прав администратора.
2) uiAccess — Необязательный. Указание того, требует ли приложение доступ к защищенным элементам пользовательского интерфейса для реализации специальных возможностей. Доступны значения «true» и «false«, по умолчанию используется значение «false«. Значение «true» должны иметь только подписанные приложения и запускалась из папок «Program Files» и «windowssystem32». Чаще всего, в этом нет необходимости.
Для того чтобы программа при запуске требовала повышение прав до уровня Администратора, заменим в атрибуте «Level» значение по умолчанию «asInvoker» на «requireAdministrator».

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












