2024年4月24日发(作者:)

VC/MFC编程弹出UAC窗口

2011年3月17日代码疯子发表评论阅读评论

很多程序能够在XP下正常运行,在Vista普及的时候遇到了各种问题,因为从Vista开始多了一个

UAC(User Account Control,用户帐户控制

)不少程序因此而出现各种莫名其妙的错误。后来,人们知道要用管理员身份启动程序。但是仍然有很

多用户对这一点不会使,软件开发商总不可能认为每个用户都会去“Run as Administrator”吧。

《Windows核心编程》曾经提及,很多软件开发者喜欢偷懒,在调用需要指明权限的API的时候往往

写入XXX_ALL_ACCESS,比如RegOpenKeyEx传入KEY_ALL_ACCESS,结果这些程序来到

Vista、Win7,对于那些不是很懂电脑的人来说,软件就显得“不好使”了。

其实,给应用程序的嵌入一段特殊的资源,就可以要求以管理员身份运行,当当前用户不是管理员时,

会要求输入管理员密码。

以VC6为例。

1. 打开你的VC6工程,找到“资源视图”,然后在视图中的树的根结点上点鼠标右键,选择菜单“插入”。

2. 在弹出的“插入资源”对话框中选择“Custom”,在新对话框(“New Custom Resource”)输入框中输入

24。因为manifest的类型是24,点击“OK”按钮。

3. 在资源视图的树上面选择24下方的条目“DDR_DEFAULT1”上点右键,选择“Properties”,将ID修改

为1。

4.

双击刚才修改的“1”资源,然后在右方的编辑器窗口中输入下面的代码:

1

2

3

version="1.0.0.0"

4

processorArchitecture="X86"

5

6

7

name="st"

type="win32"

/>

8

9

10

11

12

13

14

15

16

之后,重新编译就可以了。权限的声明在requestedExecutionLevel节点中。该元素的level 属性可

具有以下三个值之一:asInvoker, highestAvailable和requireAdministrator。不需要管理权限的可

执行文件(比如邓)指定 asInvoker 值。某些可执行文件预期管理员始终希望具有最大访

问权限,因此他们使用 highestAvailable 值。requireAdministrator 始终会导致提升请求,任何没

有管理权限就无法操作的可执行文件需要使用该值。