在Delphi中使用管理员权限开发应用程序

时间:2011-05-24 09:06:19

标签: delphi windows-7 delphi-2010 uac elevation

我在Windows 7下使用D2010来编写一个似乎需要管理员权限的应用程序(我认为因为它使用COM与第三方.exe进行通信,这也需要管理员权限)。

我已根据需要添加了清单资源,但是当我尝试从IDE调试应用程序时,它会报告

  

“无法创建流程   要求的操作要求   标高“

......它不会运行。如果我以管理员身份运行Delphi,那么我的应用程序运行正常,但这感觉就像一种危险的暴力方法,特别是因为我开发的大多数应用程序都不需要管理员权限。

有没有办法让Delphi在我运行应用程序时提示提升,而不是让整个IDE运行升级?

5 个答案:

答案 0 :(得分:11)

UAC还会捕获其名称或许多版本资源字段中包含“setup”,“update”或“install”字样的应用程序。 (公司名称,应用名称,描述等。 它认为任何此类应用程序都是潜在的“安装程序”应用程序,因此必须以管理员权限运行。

听起来很疯狂,但这是真的。请参阅此document中的“安装程序检测”部分。

您可以通过添加一个表明它不需要管理员权限的清单来解决这个问题。

答案 1 :(得分:7)

没有,它也不适用于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运行调试过程,并且在应用程序需要elavation时失败,更多详细信息可以在本文中找到:

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

RAD Studio可以使用带有“runas”动词的ShellExecute来运行应用程序,但这仍然无法解决“其他用户上下文下的调试过程”问题。

换句话说:升级过程只能由精心调试的调试。

修改

Delphi XE2 IDE是32位的,只能通过远程调试器(它巧妙地隐藏在用户之外)调试64位应用程序。

我猜Embarcadero可以以类似的方式调试提升的应用程序。

答案 2 :(得分:5)

我知道调试此类应用程序的唯一方法是以管理员身份运行IDE。我不建议这样做,只是为了调试会话。

答案 3 :(得分:1)

实际上,可以从具有“正常级别访问权限”的流程调试具有“更高级别访问权限”的流程。

至少在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

答案 4 :(得分:1)

以管理员身份运行Delphi(任何版本)。

您也可以更改Delphi快捷方式属性(始终以管理员身份运行)。