[转]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里就有.

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

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

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

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

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

http://blog.csdn.net/jimoyangguang/article/details/6324809

Win7,Vista UAC下应用程序标注为“需要管理员权限”的四种方法(可以修改注册表)的更多相关文章

  1. Vista UAC下应用程序标注为“需要管理员权限”的四种方法

    在Microsoft 的UACBlog里对此有过叙述.总结如下: 首先,如果一个程序被识别为管理员程序时,Vista会在它的图标上加上一个盾牌标记.因此很容易看出来. 其次,如果UAC有效的话,管理员 ...

  2. windows程序 UAC设置,程序运行提示使用管理员权限运行的方法

    在近期的任务中需要对光盘中的程序运行时获取管理员权限运行程序.这个功能的实现需要改变工程的配置. 在vs2015中,使用鼠标右击解决方案管理器中的工程->属性->链接器->清单文件. ...

  3. highestAvailable比较灵活,毕竟大多数功能不需要系统最高权限(四种方法:屏蔽UAC,右键以管理员身份运行,增加manisfest,制作数字证书)

    打开VS2005.VS2008.VS2010工程,查看工程文件夹中的Properties文件夹下是否有app.manifest这个文件:如没有,按如下方式创建:鼠标右击工程在菜单中选择“属性”,点击工 ...

  4. 在 Linux 下将 PNG 和 JPG 批量互转的四种方法

    计算机术语中,批处理指的是用一个非交互式的程序来执行一序列的任务[1]的方法.这篇教程里,我们会使用 Linux 命令行工具,并提供 4 种简单的处理方式来把一些 .PNG 格式的图像批量转换成 .J ...

  5. Linux 下普通用户切换root超级管理员用户的几种方法

    1.在命令行下输入:sudo su ,之后会提示你输入密码 2.此时输入你之前设定的密码既可: 3.但有时会提示你该普通用户不在sudoers文件里 4.此时可以使用以下命令来切换root用户权限:s ...

  6. 在 Mac OS X Lion 下修改 Hosts 的四种方法

    一名刚刚使用 Mac OS X Lion 系统的朋友问我怎么该系统下修改 Hosts 文件,说网上搜了很多办法都不管用,只要编辑 Hosts 文件就出现”你不是文件 hosts 的所有者,因此没有权限 ...

  7. 让.net程序自动运行在管理员权限下

    原文:让.net程序自动运行在管理员权限下 如何让.net程序自动运行在管理员权限下 VS2010 c# 编译的WINFORM程序 在Win7 以管理员身份运行 windows 7和vista提高的系 ...

  8. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...

  9. 运行jar应用程序引用其他jar包的四种方法

    转载地址:http://www.iteye.com/topic/332580 大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个ja ...

随机推荐

  1. Angular7环境搭建报错

    昨天写的2019年Angular7——安装搭建路由方法不太正统,今天又去翻了下angular官网,跟着上面的环境搭建与部署走了一遍 从安装@angular/cli命令行工具开始 本篇主要记录下搭建过程 ...

  2. 从零开始使用git第三篇:git撤销操作、分支操作和常见冲突

    从零开始使用git 第三篇:git撤销操作.分支操作和常见冲突 第一篇:从零开始使用git第一篇:下载安装配置 第二篇:从零开始使用git第二篇:git实践操作 第三篇:从零开始使用git第三篇:gi ...

  3. 每日技术总结:setInterval,setTimeout,文本溢出,小程序,wepy

    前言: 项目背景:vue,电商,商品详情页 1.倒计时,倒计到0秒时停止 data () { return { n: 10 } }, created () { let int = setInterva ...

  4. IOS基础:深入理解Objective-c中@class 和#import的区别

    在面向对象objective-C语言中,当一个类使用到另一个类时,并且在类的头文件中需要创建被引用的指针时,可以#import方式引入,通过@class引入: 这两种的方式的区别在于: 1.运用#im ...

  5. Linux下多线程查看工具(pstree、ps、pstack),linux命令之-pstree使用说明, linux 查看线程状态。 不指定

    0.最常用 pstree:[root@iZ25dcp92ckZ temp]# pstree -a|grep multe  |       |   `-multepoolser  |       |   ...

  6. iOS开发RunLoop学习:三:Runloop相关类(source和Observer)

    一:RunLoop相关类: 其中:source0指的是非基于端口por,说白了也就是处理触摸事件,selector事件,source1指的是基于端口的port:是处理系统的一些事件 注意:创建一个Ru ...

  7. Linux下图形界面调试工具kdbg安装及測试

    1.Ubuntu系统下安装 Ubuntu系统安装比較方便,直接apt-get即可 apt-get install kdbg 2.centos 安装 首先,在这个地址下下载rpm包.然后使用rpm命令安 ...

  8. php利用反射机制查找类和方法的所在位置

    //参数1是类名,参数2是方法名 $func = new ReflectionMethod('UnifiedOrder_pub', 'getPrepayId'); //从第几行开始 $start = ...

  9. js进阶 11-2 jquery属性如何操作

    js进阶 11-2  jquery属性如何操作 一.总结 一句话总结:jquery中的属性用attr方法表示.jquery中都是方法. 1.jquery中的属性的增删改查操作? 只需要两个方法, at ...

  10. [Postgres] Group and Aggregate Data in Postgres

    How can we see a histogram of movies on IMDB with a particular rating? Or how much movies grossed at ...