11

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

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

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

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

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

4

5 回答 5

13

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

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

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

于 2012-11-13T14:06:18.963 回答
10

没有,它也不适用于 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 可以以类似的方式调试提升的应用程序。

于 2011-05-24T09:26:37.763 回答
6

我知道调试此类应用程序的唯一方法是以管理员身份运行 IDE。我不建议例行执行此操作,仅用于调试会话。

于 2011-05-24T09:31:27.280 回答
1

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

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

于 2013-04-08T21:32:55.267 回答
1

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

至少在 Windows XP 之前,将您的用户帐户添加到Debugger Users组以调试运行的进程(例如,具有Administrator特权)就足够了。

这根本不能解决 Delphi 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

于 2011-06-23T14:30:01.607 回答