zoukankan      html  css  js  c++  java
  • Vista UAC下应用程序标注为“需要管理员权限”的四种方法

    在Microsoft 的UACBlog里对此有过叙述。总结如下:

    首先,如果一个程序被识别为管理员程序时,Vista会在它的图标上加上一个盾牌标记。因此很容易看出来。 

    其次,如果UAC有效的话,管理员程序启动时会弹出执行许可或者管理员密码输入对话框。 

    据此你可以知道你的标注是不是成功。 

    方法一:文件名里包含 “Setup”, ”Install” , “Update”字样,比如 TestSetup.exe 之类的。 

    这个方法由UAC的本地安全策略“检测安装程序”所控制。如果该策略设置为无效,则无效。默认是有效的。 当然,这种安装包也可以强行设置为非管理员权限运行,例如软媒团队开发的酷点闪游浏览器的安装包就是这种。

    方法二:在Exe里加入manifest资源。.Net的程序好像会自动产生一个。比较新的Visual Studio 2005也会自动生成manifest. 

    对于比较老的Visual Studio 6以前的应用程序,可以手工编辑一个mainfest文件,然后用mt.exe 写入到exe的资源里去 

    (mt.exe在Visual Studio 2005或者platform SDK里有,Visual Studio 2005 Express版是免费的,可以自由下载) 

    Manifest文件是xml格式的文本文件。如下面的例子 

    <?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="Company.Department.Exe Name" 

    type="win32"/> 

    <description>Description of your application</description> 

    <!-- Identify the application security requirements. --> 

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

    <security> 

    <requestedPrivileges> 

    <requestedExecutionLevel 

    level="requireAdministrator" 

    uiAccess="false"/> 

    </requestedPrivileges> 

    </security> 

    </trustInfo> 

    </assembly> 

    <assemblyIdentity>的name属性可以任意自取一个名字,推荐的是按名字空间方式命名。 

    <trustinfo>是Vista新增的部分。注意level被标记为requireAdministrator. 

    此外level也可设为highestAvaliable, asInvoker, asInvoker 是默认的(与父进程同权限),highestAvaliable则是可取得最大权限,基本无用。 

    将这个manifest文件命名为Exe名+.manifest, 如test.exe.manifest 
    然后用mt.exe绑定 
    Mt.exe –mainfest test.exe.manifest –outputresource:test.exe;1 

    1是这个manifest资源的ID.可以有多个manifest资源,但是vista默认使用1。其他的要自己编码来玩。 

    方法三:用微软的Application Compatibility Toolkit 4.1里的Compatibility Administrator制作一个兼容性数据库文件,扩展名为.sdb, 然后把这个sdb和应用程序一起分发。 

    基本步骤是 

    制作SDB 

    1. 在Compatibility Administrator 里新建的sdb下(打开就有),建立new fix(工具栏上的new fix)。对话框出现,输入名字。 

    2. 兼容平台选None (这个Application Compatibility Toolkit 4.1是为xp服务的,所以没有XP选项) 

    3. 然后是需要设置的兼容性,选择”RunAsAdmin”, 在列表中间的位置。需要滚动一下。 

    4. 选择exe文件名,下一步 

    5. 如果有可能存在同名exe, 选上“FileSize”, “CheckSum”, 以便使这个兼容性设置针对的确实是你的文件。 

    6. 如果有多个EXE要设,可以重复1-5步骤。 

    7. 保存sdb文件,保存时输入的数据库名字会出现在目标PC的“添加删除程序”中。 

    发布SDB 

    1. 在安装目标PC的Vista系统中,以管理员权限启动cmd(在开始菜单的“命令行提示符”图标上按右键,然后以管理员权限执行) 

    2. 输入 “sdbinst 你的sdb文件名” 例如 sdbinst test.sdb . 按回车。Sdbinst是系统自带的安装sdb的程序。XP里就有. 

    安装你的应用程序后,就能以管理员方式执行。

    此软件的具体设置图解可参考:

    http://blogs.techrepublic.com.com/window-on-windows/?p=635

    方法四:用户自己动手,或者Vista自动检测,或者你修改注册表。 

    用户自己动手的方法是在Exe文件的属性对话框的“兼容性”标签中,选中“以管理员权限执行此程序”复选框。 

    此外,如果你的程序CreateProcess反复失败的话,有时Vista会冒出个“程序兼容性助手”,自动给你这个程序在注册表里加一项。 

    手动修改注册表其实和上2者一样。键为 
    HKEY_CURRENT_USERS/Software/Microsoft/Windows NT/CurrentVersion/AppCompatFlags/Layer 键下面的值的名字是程序的全路径,值数据是“RunAsAdmin”.(兼容性助手写入的值是ElevateCreateProcess)

    http://blog.csdn.net/jiangxinyu/article/details/5412696

  • 相关阅读:
    ubuntu创建桌面启动器
    UVA 题目11300 Spreading the Wealth
    js实现C#的Server.Encode和Server.Decode
    boost库在工作(20)线程之五
    rmmod: chdir(/lib/modules): No such file or directory
    例说uboot从命令到驱动
    java高级工程师struts的知识重点
    ThreadLocal简单学习
    [CSS]为什么不推荐在CSS中使用ID选择器
    laravel中将session由文件保存改为数据库保存
  • 原文地址:https://www.cnblogs.com/findumars/p/5811498.html
Copyright © 2011-2022 走看看