VC/MFC编程弹出UAC窗口

很多程序能够在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”资源,然后在右方的编辑器窗口中输入下面的代码:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

            <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 

            <assemblyIdentity

                        version="1.0.0.0" 

                        processorArchitecture="X86" 

                        name="test.exe.manifest" 

                        type="win32" 

            /> 

            <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 

            <security> 

                        <requestedPrivileges> 

                                    <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 

                        </requestedPrivileges> 

            </security> 

            </trustInfo> 

</assembly>


VC/MFC编程弹出UAC窗口_第1张图片

之后,重新编译就可以了。权限的声明在requestedExecutionLevel节点中。该元素的level 属性可具有以下三个值之一:

asInvoker, highestAvailable和requireAdministrator。

不需要管理权限的可执行文件(比如Notepad.exe邓)指定 asInvoker 值。

某些可执行文件预期管理员始终希望具有最大访问权限,因此他们使用 highestAvailable 值。

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


原文:http://www.programlife.net/windows-vista-7-program-need-uac.html

你可能感兴趣的:(win7,vista,管理员,uac)