首页 > MFC开发 > VC/MFC编程弹出UAC窗口

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”资源,然后在右方的编辑器窗口中输入下面的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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>

管理员运行程序
非管理员运行程序时的提示

之后,重新编译就可以了。权限的声明在requestedExecutionLevel节点中。该元素的level 属性可具有以下三个值之一:asInvoker, highestAvailable和requireAdministrator。不需要管理权限的可执行文件(比如Notepad.exe邓)指定 asInvoker 值。某些可执行文件预期管理员始终希望具有最大访问权限,因此他们使用 highestAvailable 值。requireAdministrator 始终会导致提升请求,任何没有管理权限就无法操作的可执行文件需要使用该值。


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> VC/MFC编程弹出UAC窗口
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: MFC开发 标签: , , ,
  1. 本文目前尚无任何评论.