Разработка приложений с правами администратора в Delphi - PullRequest
7 голосов
/ 24 мая 2011

Я использую D2010 под Windows 7, чтобы написать приложение, которое, по-видимому, требует прав администратора (я думаю, потому что оно использует COM для связи с сторонним .exe, который также требует прав администратора).

Я добавил ресурс манифеста по мере необходимости, но когда я пытаюсь отладить приложение из IDE, он сообщает

"Невозможно создать процесс. запрашиваемая операция требует высота "

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

Есть ли способ заставить Delphi запрашивать повышение прав только при запуске приложения, а не запускать повышенную версию всей среды IDE?

Ответы [ 5 ]

11 голосов
/ 13 ноября 2012

UAC также перехватывает любое приложение, которое имеет слова «setup», «update» или «install» в своем имени или во многих полях Version Resource. (Название компании, название приложения, описание и т. Д. Он считает любое такое приложение потенциальным приложением-установщиком и поэтому должен запускаться с правами администратора.

Звучит безумно, но это правда. См. Раздел «Обнаружение установщика» в этом документе .

Вы можете обойти это, включив манифест, который говорит, что ему не нужны права администратора.

7 голосов
/ 24 мая 2011

Нет, он также не работает для VS:

https://stackoverflow.com/questions/3265787/how-do-i-debug-an-process-as-elevated-with-visual-studio-2008-sp1-on-windows-7

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

Это не работает, потому что процесс выполняется от имени другого пользователя (или с использованием другого токена пользователя).

Среда IDE пытается запустить процесс отладки с помощью CreateProcess, который завершается неудачно, когда приложение требует удаления, более подробную информацию можно найти в этой статье:

http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

RAD Studio может запустить приложение, используя ShellExecute с глаголом «runas», но это по-прежнему не решает проблему «процесса отладки в другом контексте пользователя».

Другими словами: повышенный процесс может быть отлажен только удаленным отладчиком.

Edit:

Delphi XE2 IDE является 32-битной и может отлаживать 64-битные приложения только через удаленный отладчик (который скрытно скрыт от пользователя).

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

5 голосов
/ 24 мая 2011

Единственный способ отладки такого приложения, который я знаю, - запустить IDE от имени администратора.Я бы не рекомендовал делать это регулярно, просто для отладки.

1 голос
/ 09 апреля 2013

Запуск Delphi (любая версия) от имени администратора.

Вы также можете изменить свойства ярлыка Delphi (чтобы запускать его всегда от имени администратора).

1 голос
/ 23 июня 2011

На самом деле может быть возможно отладить процесс с «доступом более высокого уровня» из процесса с «доступом нормального уровня».

По крайней мере, до Windows XP достаточно добавить свою учетную запись пользователя в Debugger Users группа для отладки процессов, выполняющихся, например, с привилегиями Administrator.

Это не решает проблему Delphi 2010 для запуска процесса вообще, но может быть полезно, если вы пытаетесь подключить отладчик к уже запущенномуprocess.

Я не думаю, что это работает на UAC с Vista +, но я все равно упомянул об этом.:)

Если быть точным, концепция разделенного токена UAC отключает SeDebugPrivilege:

http://blogs.msdn.com/b/greggm/archive/2006/03/30/565303.aspx

http://blogs.msdn.com/b/mithuns/archive/2006/04/04/568291.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...