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

2024-02-27 03:38

本文主要是介绍Vista UAC下应用程序标注为“需要管理员权限”的四种方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

Vista之家(www.vista123.com):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)

这篇关于Vista UAC下应用程序标注为“需要管理员权限”的四种方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/751098

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

SpringBoot中ResponseEntity的使用方法举例详解

《SpringBoot中ResponseEntity的使用方法举例详解》ResponseEntity是Spring的一个用于表示HTTP响应的全功能对象,它可以包含响应的状态码、头信息及响应体内容,下... 目录一、ResponseEntity概述基本特点:二、ResponseEntity的基本用法1. 创

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自