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

相关文章

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应

python 3.8 的anaconda下载方法

《python3.8的anaconda下载方法》本文详细介绍了如何下载和安装带有Python3.8的Anaconda发行版,包括Anaconda简介、下载步骤、安装指南以及验证安装结果,此外,还介... 目录python3.8 版本的 Anaconda 下载与安装指南一、Anaconda 简介二、下载 An

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D