Проверка наличия прав администратора и запрос прав в программе на Delphi.

В данной статье опишу два основных способа получения прав администратора. Первый вариант: указать с помощью манифеста, что для запуска приложения обязательно требуются права администратора. Второй способ: написать функцию проверки наличия прав администратора и если функция вернёт отсутствие прав администратора программу можно перезапустить используя добавив в программу ShellAPI в uses и используя в нужном месте строчку: ShellExecute(Self.Handle,'runas',PChar(paramStr(0)),nil,nil,SW_SHOWNORMAL); для перезапуска программы от имени администратора. В этой строчке второй строковой параметр 'runas' означает что программа запускаемая через ShellExecute должна быть вызвана с правами администратора, о чём в Windows 10 при выполнении этой строчки Вы получите соответствующее уведомление о том что указанная строке программа запрашивает права администратора. Третий параметр - PChar(paramStr(0)) говорит о том что запускается сама выполняемая программа, поскольку paramStr(0) хранит полный адрес к выполняемой программе(а следующие значения paramStr, например paramStr(1) и так далее - хранят параметры с которыми была запущена программа, если разумеется программа была запущена с параметрами). После строчки ShellExecute Вы можете закрыть изначально запущенную программу, оставив только новый открытый экземпляр с правами администратора строчкой Halt;

Запрос прав администратора на Delphi 6 с использованием манифеста

Начну с получения прав админа через использование манифеста к программе. Я уже писал статью о том как подключить манифест к разрабатываемой программе на Delphi 6 повторно эту процедуру описывать не буду. Для создания манифеста который будет запрашивать права администратора в Вашей программе на Delphi создайте и подключите манифест к Вашей программе аналогично тому как я сделал это в статье по приведённой ссылке с той лишь разницей, что для запроса прав администратора в манифест перед description добавьте следующее:

Функция для определения наличия прав администратора у выполняемой программы

В следующем листинге я привёл программный код функции myCheckIsAdmin которая возвращает true если у выполняемой программы на Delphi есть права администратора или false если прав администратора нет. Какие либо модулей в uses для работы этой функции добавлять нет необходимости. Ниже я приведу полный код программы в которой будет использоваться эта функция.

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

Для того чтобы посмотреть как работает программа создайте новое приложение на Delphi а затем переместите на форму Button1 и Button2 после чего замените весь программный код на код из листинга ниже.

Поскольку в программе из листинга ниже используется ShellExecute для работы потребуется в uses добавить модуль ShellApi, какие либо другие модули не потребуются. Если Вы ещё не знакомы с ShellExecute, то она необходима для того чтобы из создаваемой Вами программы на Delphi запускать другие программы.

По нажатию на кнопку Button1 в данной демонстрационной программе Вы увидите сообщение "Есть права админа" или "Нет прав админа" соответственно в зависимости от наличия прав администратора у программы. По нажатию на кнопку 2 если прав администратора у программы ещё нет она будет перезапущена от имени администратора, или если права администратора уже есть Вы увидите соответствующее сообщение.

Комментарии

Если у Вас возникли вопросы, Вы можете задать их в форме ниже. В частности если Ваш вопрос по Bitrix и что то не получается - можно спросить. Ваш e-mail не публикуется, при этом я отвечу на него если будет что то по теме. Писать необходимо для людей - избегайте сленга, пишите орфографически правильно.

Имя:
E-mail:
Текст комментария:

Вы так же можете прочитать следующие статьи: