2011-05-24 170 views
7

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

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

“无法创建进程。该 请求的操作需要 提升”

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

当我运行我的应用程序而不是让整个IDE运行提升时,有什么方法可以让Delphi提示提升?

+6

当您需要为* that *应用程序工作并在其他人上工作时以普通用户身份启动IDE时,以管理员身份启动IDE会出现什么问题?我就是做这个的! – 2011-05-24 09:28:21

+0

@科斯敏,谢谢。似乎这可能是最好的方法。 – Roddy 2011-05-24 09:35:34

+1

这是正常行为,调试器无法调试提升的调试对象,必须在启动调试会话之前提升*。 – 2011-05-24 21:21:26

回答

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可以运行使用ShellExecute的应用与“runas”动词,但这仍然不能解决“其他用户上下文下的调试过程”问题。

换句话说:升级的进程只能由精心设计的调试器进行调试。

编辑:

Delphi的XE2 IDE是32位,并且只能通过远程调试器(其被巧妙地从用户隐藏)调试64位应用程序。

我想英巴卡迪诺可以以类似的方式调试高级应用程序。

+0

我不明白这个答案。当我读到它时,你会发现,即使IDE运行提升,它也无法调试具有必需的管理员清单的进程。我是否正确地理解你?我认为我不能正确理解你,因为那个陈述是错误的。 – 2011-05-24 15:05:53

+1

@David:我说**调试应用程序**可以通过IDE提升,但IDE仍然无法附加到应用程序。我编辑了相应的句子来澄清。 – 2011-05-24 15:45:55

+1

所以你的答案可以归结为“一个升级的过程只能通过提升的调试器进行调试”?那是对的吗? – 2011-05-24 22:11:11

4

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

+0

如果切实可行,您还应该将应用程序分成两个独立的部分:一个作为正常的“AsInvoker”进程运行,另一个需要提升。然后你应该添加“UAC盾”到开始另一个过程的按钮,这就是UAC应该如何实现的。然后您只需提升IDE以调试“RequireAdministrator”进程。 – 2011-05-25 09:35:37

1

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

至少要等到Windows XP中就足够了您的用户帐户添加到Debugger Users组例如运行调试进程与Administrator特权。

这并不解决德尔福2010年代的问题在所有运行进程,但如果你尝试调试器附加到一个已经运行的进程可能是有用的。

我不认为这适用于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

11

UAC还捕捉具有词语 “设置”, “更新” 或“的任何应用程序安装“的名称或许多版本资源字段中。 (公司名称,应用程序名称,说明等) 它认为任何此类应用程序都是潜在的“安装程序”应用程序,因此必须以管理员权限运行

听起来很疯狂,但是的确如此,请参见“安装程序检测”在此document节。

您可以通过包含一个清单,指出它不需要管理员权限解决这个问题。

+2

欢迎来到StackOverflow,@Phil。你真的读过这个问题吗?你的回答看起来与被问到的内容无关。 – jachguate 2012-11-13 16:08:52

+0

我明白你的观点。我添加了关于UAC的相关信息,因为有人提出了这个问题。它实际上并不存在这个问题。道歉。 – 2013-07-29 11:26:19

+0

不要道歉,这是一个很好的答案,对于一个非常不同的问题。所以想法是对特定问题有特定的答案,所以积累“相关的东西”并不是真正的目标,而且我们有谷歌这样做;) – jachguate 2013-07-29 18:39:32

1

运行德尔福(所有版本)以管理员身份。

您可以更改德尔福快捷方式属性也(作为管理员始终运行它ATOR)。

相关问题