Я включил UAC из проекта -> Параметры ... -> Манифест введите описание изображения здесь

Но когда UAC подсказал

enter image description here

И я выбираю «Нет», delphi .exe не запускается вообще. Он будет работать, только если я выберу «Да».

Я хотел бы спросить, есть ли способ обойти этот вопрос? Не имеет значения, выберу ли я «Да» или «Нет», delphi .exe все равно будет работать, как и предполагалось, с / без привилегий администратора.

0
EllynLyn 30 Ноя 2020 в 12:39

1 ответ

Лучший ответ

Повышение уровня происходит только при запуске процесса. Процесс не может динамически повышаться после того, как он начал работать.

Чтобы сделать то, о чем вы просите («Неважно, выберу ли я« Да »или« Нет », delphi .exe все равно будет работать, как и предполагалось, с / без привилегий администратора»), вам необходимо разбить вашу программу на 2 отдельных куска.

Ваш основной процесс должен выполняться без повышенных прав (Уровень выполнения = «Как вызывающий»), выполняя любые задачи, не требующие повышения прав.

Переместите свои задачи с повышенными правами в:

  • отдельный EXE (уровень выполнения = «Самый высокий доступный» или «Требуется администрирование»), который можно запускать при необходимости.

  • отдельная часть вашего основного EXE, то есть вызываемая параметрами командной строки, которую вы можете запустить при необходимости, используя ShellExecute/Ex() с командой "runas".

  • COM-объект, который можно создавать и вызывать при необходимости с помощью COM Elevation Moniker.

2
Remy Lebeau 30 Ноя 2020 в 17:54