(转) Vista下让编译的程序自动请求管理员权限详细说明
2009-05-21 17:38
351 查看
原创地址:http://www.cnblogs.com/walkingmu/archive/2008/01/11/1034678.html
有关如何动态请求权限请参考我另外一篇文章(在Vista的UAC下检查程序是否具有Admin权限及应用程序的权限切换 )
以前写过IFEO映像劫持解除程序。但是因为在VISTA下的关系,需要自己设置使用管理员权限运行。自己玩的时候还不觉得什么,最近同学问我要这个程序玩,结果怎么也不成功,就是因为没有设置管理员权限的关系。那么怎么才能让程序在没有用户干预下直接请求管理员权限呢?奥妙就在manifest文件里。
从Heller的blog里我找到一些资料,不过是E文的,有兴趣的可以通篇阅读下,会很有帮助的。地址是:http://blogs.msdn.com/cheller/archive/2006/08/24/how-to-embed-a-manifest-in-an-assembly-let-me-count-the-ways.aspx
如果看不懂,那么就看我的分析吧。
据Heller所说,有三种方法可行。第一种是在.RC(resource script file)文件中写代码;第二种是用MT.EXE(在visual studio目录下搜索吧)把manifest和exe文件合并;第三种是直接用visual studio设置。
第一种方法在看系统核心编程的时候见过,而且heller写得很多,我就被吓退了。接下来看到第三种方法貌似瞎简单的,所以就试试,结果找了半天也没找到在哪里有。后来另一个国外的朋友给我结了张图,结果发现我的visual studio打了vista兼容补丁之后那个选项莫名失踪 = =||。无奈之下只能选择第二种了。
首先我们搜索viusal studio安装目录发现三个mt.exe(编译程序的时候就是用的这个)。一个是.net的,另一个是vc的,最后一个是common(我估摸着应该是通用的意思,不确定的时候用这个吧,我估计通用的一般不好)。
接下来我们把程序和MT.EXE放在一个目录(纯属方便,可以不这么做),接下来要做一个manifest文件,其实就是把下面代码存到一个文本里,保存为后缀为manifest的文件。我这里保存为IFEOHijack.exe.manifest。代码如下(其中My application等字符串可以改成自己喜欢的程序信息):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
processorArchitecture="x86"
version="5.1.0.0"
type="win32"
name="MyApplication"
/>
<description> My Application </description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="x86"
/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
存好之后我们就动工啦,打开命令提示符,定位目录到MT.EXE,然后运行如下命令:
mt.exe -manifest ExeName.exe.manifest -outputresource:ExeName.exe;#1
如截图所示:
截图中我将适用于.net程序的mt.exe改名为mt_net.exe了。
最后我们就可以将做的manifest文件删了,修改好的程序放到Vista系统中会自动请求管理员权限啦~
有关如何动态请求权限请参考我另外一篇文章(在Vista的UAC下检查程序是否具有Admin权限及应用程序的权限切换 )
以前写过IFEO映像劫持解除程序。但是因为在VISTA下的关系,需要自己设置使用管理员权限运行。自己玩的时候还不觉得什么,最近同学问我要这个程序玩,结果怎么也不成功,就是因为没有设置管理员权限的关系。那么怎么才能让程序在没有用户干预下直接请求管理员权限呢?奥妙就在manifest文件里。
从Heller的blog里我找到一些资料,不过是E文的,有兴趣的可以通篇阅读下,会很有帮助的。地址是:http://blogs.msdn.com/cheller/archive/2006/08/24/how-to-embed-a-manifest-in-an-assembly-let-me-count-the-ways.aspx
如果看不懂,那么就看我的分析吧。
据Heller所说,有三种方法可行。第一种是在.RC(resource script file)文件中写代码;第二种是用MT.EXE(在visual studio目录下搜索吧)把manifest和exe文件合并;第三种是直接用visual studio设置。
第一种方法在看系统核心编程的时候见过,而且heller写得很多,我就被吓退了。接下来看到第三种方法貌似瞎简单的,所以就试试,结果找了半天也没找到在哪里有。后来另一个国外的朋友给我结了张图,结果发现我的visual studio打了vista兼容补丁之后那个选项莫名失踪 = =||。无奈之下只能选择第二种了。
首先我们搜索viusal studio安装目录发现三个mt.exe(编译程序的时候就是用的这个)。一个是.net的,另一个是vc的,最后一个是common(我估摸着应该是通用的意思,不确定的时候用这个吧,我估计通用的一般不好)。
接下来我们把程序和MT.EXE放在一个目录(纯属方便,可以不这么做),接下来要做一个manifest文件,其实就是把下面代码存到一个文本里,保存为后缀为manifest的文件。我这里保存为IFEOHijack.exe.manifest。代码如下(其中My application等字符串可以改成自己喜欢的程序信息):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
processorArchitecture="x86"
version="5.1.0.0"
type="win32"
name="MyApplication"
/>
<description> My Application </description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="x86"
/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
存好之后我们就动工啦,打开命令提示符,定位目录到MT.EXE,然后运行如下命令:
mt.exe -manifest ExeName.exe.manifest -outputresource:ExeName.exe;#1
如截图所示:
截图中我将适用于.net程序的mt.exe改名为mt_net.exe了。
最后我们就可以将做的manifest文件删了,修改好的程序放到Vista系统中会自动请求管理员权限啦~
相关文章推荐
- Vista下让编译的程序自动请求管理员权限详细说明
- delphi7 编译的程序在win7下请求获得管理员权限的方法
- VC6 编译程序在Vista/win 7上要求管理员权限[转]
- 编译完成的工程在WIN7或者VISTA下自动使用管理员权限运行
- C# 让程序自动以管理员身份运行,请求权限【转】
- Vista、Win7上.net程序如何自动使用管理员权限运行
- Vista、Win7上.net程序如何自动使用管理员权限运行
- 以管理员权限运行此程序_vista
- 解决win8/8.1程序不能以管理员权限自动启动问题
- 如何下载Android源码(非常详细,含自动恢复下载,编译,运行模拟器说明)
- VC编写vista或win7下需要管理员权限运行的程序
- 设置C#程序在Windows 7 Vista下以管理员权限运行(转)
- 让.net程序自动运行在管理员权限下
- vs2010编译具备管理员权限的程序
- .bat文件注册.ocx+win8开机获得管理员权限+运行程序自动注册.ocx
- 让.net程序自动运行在管理员权限下
- 让delphi生成的程序自动使用管理员权限,带有uac盾牌
- Delphi下如何使程序在Vista上用管理员权限运行
- EXE4J生成的exe文件自动请求管理员权限(UAC)
- 易语言 让编译的程序自动以管理员身份运行