Разработка приложений с правами администратора в Delphi
Я использую D2010 под Windows 7 для написания приложения, которое, похоже, требует прав администратора (я думаю, потому что он использует COM для связи с третьей стороной .exe, который также требует прав администратора).
Я добавил ресурс манифеста по мере необходимости, но когда я пытаюсь отладить приложение из IDE, он сообщает
" невозможно создать процесс. Этот запрошенная операция требует высота"
...и он не будет работать. Если я запускаю Delphi как администратор, тогда мое приложение работает правильно, но это похоже на опасный подход грубой силы, тем более, что большинство приложений, которые я разрабатываю, не нуждаются в привилегиях администратора.
есть ли способ заставить Delphi запрашивать повышение только при запуске приложения, а не при запуске всей IDE?
5 ответов
нет, он также не работает для vs:
Я думаю,вы можете запустить удаленный отладчик с повышенными правами и подключить 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 (чтобы всегда запускать его как администратор).