程序运行失败的原因与User Account Control
2011-06-06 21:12
435 查看
今天是端午节,虽然差不多已经快过完了,但还是祝各位节日快乐,天天开心,美满幸福。
============================================================================
User Account Control(UAC:用户帐户控制)是微软为提高系统安全而在Windows Vista及Windows 7中引入的新技术,它要求所有用户在标准账号模式下运行程序和任务,阻止未认证的程序安装,并阻止标准用户进行不当的系统设置改变。UAC主要用来解决用户以管理员身份登录的问题。由于有些系统功能或程序需要以管理员的身份操作,因此很多用户(包括IT专家)平时都会以管理员身份登录系统,这给系统安全带来了相当多的问题。微软在以往的操作系统中也试图解决这一问题,现在UAC可以让用户以管理员身份登录,但是会以普通用户权限执行大部分操作,当用户试图执行一些需要较高权限的操作时,系统才会提升用户的操作权限。(此部分内容来自百度百科)
为什么会扯到UAC呢?因为在上一篇说到,自己写的魔兽显血改键工具WarKey提升了Debug权限,在多数人的机子上运行都没问题,但在班上一个同学的电脑上运行时,提升权限的函数总是失败。我仔细地检查了程序,没有问题。郁闷了半天,终于发现他的机子和别人的机子的差别:他的机子上UAC没有禁用。难道是UAC的问题?再“以管理员的身份运行”,程序正常了,看来有点像是UAC的问题啊。
后来上MSDN查,在一篇博客里看到一段话(具体位置我忘了是哪了,不然我会把网址贴出来),大意是说如果程序提升了某些权限,但如果这个程序不是以管理员身份运行的话,UAC就会自动把这些提升的权限给还原回去,这些权限中就包括Debug权限。看来真是UAC搞的鬼啊。
找到原因就好办了,综合网上说的,有三个解决方法:
(1) 每次运行程序时,选择"Run as administrator"即可;
(2) 如果嫌(1)的方法麻烦的话:打开程序的Properties(属性)对话框->Compatibility(兼容性)选项卡,勾选"Run this program as an administrator"(以管理员身份运行此程序),确定即可;
(3) 如果还嫌(2)的方法麻烦,就只能在程序编译时想办法了:在Visual Studio中打开项目的Properties选项卡,找到Configuration Properties->Linker->Manifest File,将UAC Execution Level改为requireAdministrator (/level='requireAdministrator')即可(默认为asInvoker (/level='asInvoker'))。
以上方法可以绕过UAC,但如果没禁用UAC的话,运行程序时还是会出现那个对话框提示,很烦。最好的方法就是把UAC禁掉,反正我的UAC就从来没启用过。真正的病毒木马什么的,要是这蛋疼的UAC都能拦住,那天下的病毒木马什么的也不用混了。M$的想法是好的,只是可惜这UAC鸡肋了。
============================================================================
User Account Control(UAC:用户帐户控制)是微软为提高系统安全而在Windows Vista及Windows 7中引入的新技术,它要求所有用户在标准账号模式下运行程序和任务,阻止未认证的程序安装,并阻止标准用户进行不当的系统设置改变。UAC主要用来解决用户以管理员身份登录的问题。由于有些系统功能或程序需要以管理员的身份操作,因此很多用户(包括IT专家)平时都会以管理员身份登录系统,这给系统安全带来了相当多的问题。微软在以往的操作系统中也试图解决这一问题,现在UAC可以让用户以管理员身份登录,但是会以普通用户权限执行大部分操作,当用户试图执行一些需要较高权限的操作时,系统才会提升用户的操作权限。(此部分内容来自百度百科)
为什么会扯到UAC呢?因为在上一篇说到,自己写的魔兽显血改键工具WarKey提升了Debug权限,在多数人的机子上运行都没问题,但在班上一个同学的电脑上运行时,提升权限的函数总是失败。我仔细地检查了程序,没有问题。郁闷了半天,终于发现他的机子和别人的机子的差别:他的机子上UAC没有禁用。难道是UAC的问题?再“以管理员的身份运行”,程序正常了,看来有点像是UAC的问题啊。
后来上MSDN查,在一篇博客里看到一段话(具体位置我忘了是哪了,不然我会把网址贴出来),大意是说如果程序提升了某些权限,但如果这个程序不是以管理员身份运行的话,UAC就会自动把这些提升的权限给还原回去,这些权限中就包括Debug权限。看来真是UAC搞的鬼啊。
找到原因就好办了,综合网上说的,有三个解决方法:
(1) 每次运行程序时,选择"Run as administrator"即可;
(2) 如果嫌(1)的方法麻烦的话:打开程序的Properties(属性)对话框->Compatibility(兼容性)选项卡,勾选"Run this program as an administrator"(以管理员身份运行此程序),确定即可;
(3) 如果还嫌(2)的方法麻烦,就只能在程序编译时想办法了:在Visual Studio中打开项目的Properties选项卡,找到Configuration Properties->Linker->Manifest File,将UAC Execution Level改为requireAdministrator (/level='requireAdministrator')即可(默认为asInvoker (/level='asInvoker'))。
以上方法可以绕过UAC,但如果没禁用UAC的话,运行程序时还是会出现那个对话框提示,很烦。最好的方法就是把UAC禁掉,反正我的UAC就从来没启用过。真正的病毒木马什么的,要是这蛋疼的UAC都能拦住,那天下的病毒木马什么的也不用混了。M$的想法是好的,只是可惜这UAC鸡肋了。
相关文章推荐
- 关于winserver2012运行c++程序缺少dll的原因,而且c++运行时程序安装失败的解决办法
- 在Qsys上运行程序时出现make elf文件失败的原因
- 安卓在xml文件(布局文件)中做一些细微改变却运行程序报错的原因
- MFC 简单的对话框小程序在虚拟机中运行失败
- java运行失败原因
- [原]NDK程序在虚拟机上运行出现signal 4 (SIGILL), fault addr 错误的原因及解决方法
- cx_Oracle库导入失败引起crontab中python程序运行失败,并且无错误提示
- 关于XP\win7系统中安装.net4.0 程序运行版本出错的原因之一
- 如何使用 UserAccountControl 标志操纵用户帐户属性
- 【Python】程序在运行失败时,一声不吭继续运行pass
- 调用KernelIoControl获取逻辑中断号失败的原因(收集于论坛)
- 解决Win32 SDK编程添加list control控件程序无法运行的问题 . 和如何画进度条
- [转]php中使用ignore_user_abort()函数后,如何停止后台运行的程序?
- JavaWeb程序运行缓慢原因分析之一
- JVM 本地连接失败时,检查运行程序JVM启动参数
- Windows Vista for Developers——第四部分:用户帐号控制(User Account Control,UAC)
- NDK程序在虚拟机上运行出现signal 4 (SIGILL), fault addr 错误的原因及解决方法
- Windows|Eclipse 运行HDFS程序遇到问题之 AccessControlException【windows中运行hdfs程序后报的异常:访问权限控制异常;方案二,修改MR程序即可】
- BUG:Visual Studio 6.0 中出现错误消息“Setup Was Unable to Create a DCOM User Account”(安装程序无法创建 DCOM 用户帐户)
- Ajax程序在VS2008下运行正常,但在服务器IIS6下不正常原因分析