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

时间:2010-01-28 11:21:43

标签: c# windows file uac

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

  

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

由于

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

尝试使用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,则需要提升。

答案 2 :(得分:0)

最好的方法是解析其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)

不确定Kenny如何编写代码,但它显示了这种可能性。