如何检测可执行文件是否需要UAC提升(C#pref)

如何检测可执行文件是否需要UAC提升? 到目前为止,我有两个想法:可执行文件图标的图片识别,以检查是否有UAC盾牌图标和维基百科的信息: http : //en.wikipedia.org/wiki/User_Account_Control

通过使用CreateProcess()并将dwCreationFlags参数设置为CREATE_SUSPENDED,可以以编程方式检测可执行文件是否需要提升。 如果需要提升,则会返回ERROR_ELEVATION_REQUIRED。[16] 如果不需要提升,则会返回成功的返回码,在此时您可以在新创build的挂起的进程上使用TerminateProcess()。 如果您已经在升级过程中执行,这将不允许您检测到可执行文件需要提升。

谢谢

尝试使用kernel32.dll导出的CheckElevation函数。 这是一个完全没有记录的功能,但这是我能够反向工程:

ULONG CheckElevation( __in PWSTR FileName, __inout PULONG Flags, // Have a ULONG set to 0, and pass a pointer to it __in_opt HANDLE TokenHandle, // Use NULL __out_opt PULONG Output1, // On output, is 2 or less. __out_opt PULONG Output2 ); 

你将不得不做一些实验,找出如何正确调用函数。 到目前为止,我所能做的是,如果Output1不是0,则需要提升。

如果可以通过编程检查,为什么要使用图片识别? 您可以使用P / invoke调用CreateProcess所需的参数。

最好的方法是解析它的PE格式,然后知道它的清单文件是否需要UAC。

http://weblogs.asp.net/kennykerr/archive/2007/07/10/manifest-view-1-0.aspx?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+KennyKerr+(Kenny+Kerr)

不知道肯尼如何写代码,但它显示的可能性。