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 始终会导致提升请求,任何没 有管理权限就无法操作的可执行文件需要使用该值。


发布评论