zoukankan      html  css  js  c++  java
  • 程序运行失败的原因与User Account Control

    今天是端午节,虽然差不多已经快过完了,但还是祝各位节日快乐,天天开心,美满幸福。

    ============================================================================

    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鸡肋了。

  • 相关阅读:
    Selenium实战(七)——自动发送邮件
    Selenium实战(六)——数据驱动应用
    Selenium实战(四)——unittest单元测试3(测试用例的执行顺序)
    Selenium实战(四)——unittest单元测试2(断言方法+discover()多测试用例的执行)
    运维工具
    实用的shell脚本面试题和答案
    mssql2000 数据库一致性错误修复
    c#基础
    任务表 步骤表
    BPM事件
  • 原文地址:https://www.cnblogs.com/ini_always/p/2073875.html
Copyright © 2011-2022 走看看