Разработка приложений с правами администратора в Delphi

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

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

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

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

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

5 ответов


нет, он также не работает для 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", но это все равно не решает проблему" отладка процесса в контексте другого пользователя".

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

Edit:

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

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


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

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

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


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


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

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

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

Я не думаю, что это работает на 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


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

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