Как включить UAC для программы delphi?

#delphi #manifest #uac #administrator

#delphi #манифест #uac #администратор

Вопрос:

Я включил UAC из Project -> Options… -> Манифест введите описание изображения здесь

но когда UAC запросил

введите описание изображения здесь

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

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

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

1. Я подозреваю, что сработает следующее: запустите приложение в обычном режиме и во время запуска попытайтесь создать новый процесс приложения с повышенными правами. Если это удастся, пусть исходный процесс просто завершится; в противном случае пусть он продолжается.

2. Нужно ли запускать вашу программу с повышенными правами или нет? Если это так, то все в порядке. Если нет, то используйте asInvoker. Если некоторым частям требуется повышение прав доступа, а некоторым — нет, вам нужно соответствующим образом разделить программу.

3. Похоже, вы сталкиваетесь с этой проблемой с неполным пониманием того, что такое UAC, что запрашивает это диалоговое окно и почему это необходимо. Предложите обзор того, как работает контроль учетных записей пользователей (MSDN) , уделяя особое внимание разделу архитектуры. Вы во власти пользователя. Ваша программа ничего не может сделать, чтобы изменить предпочтения пользователя требовать (или нет) запросов UAC для запросов на повышение прав. В некоторых случаях вы можете избежать этого, в других — нет.

4. Обойти этот вопрос невозможно. Он работает точно так, как должен; если вы говорите «Нет», вы говорите, что НЕ хотите, чтобы приложение запускалось и вносило изменения на ваш компьютер, и в этом случае приложению не разрешается запускаться. Он работает точно так, как задумано, и именно так, как вы его настроили.

5. Единственный другой вариант предоставления приложению постоянных административных прав без необходимости подтверждения пользователя — это установить ваше приложение в качестве системной службы. Для этого потребуется административный доступ только для первоначальной установки. Примером этого являются такие вещи, как служба обслуживания Mozilla.

Ответ №1:

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

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

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

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

  • отдельный EXE-файл (уровень выполнения = «Самый высокий доступный» или «Требуется администрирование»), который вы можете запускать при необходимости.
  • отдельная часть вашего основного EXE-файла, т.Е. вызываемая параметрами командной строки, которую вы можете запускать при необходимости ShellExecute/Ex() с помощью "runas" глагола.
  • COM-объект, который вы можете создавать и вызывать, когда это необходимо, используя псевдоним COM Elevation.