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

相关文章

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET