【发布时间】:2010-01-28 11:21:43
【问题描述】:
如何检测可执行文件是否需要 UAC 提升? 到目前为止,我想到了两个想法: 可执行文件图标的图片识别以检查UAC盾牌图标是否在其上 以及来自维基百科的信息: http://en.wikipedia.org/wiki/User_Account_Control
可以通过使用 CreateProcess() 并将 dwCreationFlags 参数设置为 CREATE_SUSPENDED 以编程方式检测可执行文件是否需要提升。如果需要海拔高度,则将返回 ERROR_ELEVATION_REQUIRED。[16]如果不需要提升,将返回成功返回代码,此时您可以在新创建的挂起进程上使用 TerminateProcess()。如果您已经在提升的进程中执行,这将不允许您检测可执行文件需要提升。
谢谢
【问题讨论】:
-
请注意,Windows Explorer 会将盾牌图标叠加在可执行文件自己的图标上,因此实际上从可执行文件中提取图标并检查它是行不通的。 (另外,这可能不是一个好方法......)
-
为什么需要这样做?你能提供更多的上下文吗?您通常不需要关心进度是否需要提升,因为操作系统会为您处理。抓住所有病例也几乎是不可能的。 (例如,进程本身可能在没有 UAC 的情况下启动,然后,根据命令行,在启动期间手动提升 COM 对象。如果不编写 CPU 和 Windows 仿真器,您无法判断它是否会提前执行此操作 :)。)