您的位置:首页 > 编程语言 > C语言/C++

如何让生成的程序以管理员身份运行(C++builder 2010)

2016-04-21 14:44 435 查看
(转载自http://feng06.blog.163.com/blog/static/13501502014102385528860/)

在vista以后的windows版本中,有些时候需要提升编译后生成程序的权限,即希望让生成的程序以管理员身份运行。虽然在一般情况下,可以使用鼠标右键选择的方式来强行以管理员身份运行,但它并没有屏蔽普通运行方式,而且普通人通常也不会使用右键选择以管理员身份运行,所以必须在生成程序时就限定程序只能以管理员方式来运行。以下以C++builder为例来说明一下具体方法。

先简单说一下,在vista以后的windows版本中,微软引入了UAC机制,它的目的是防止程序对操作系统本身进行恶意篡改。要让程序以管理员身份运行,就需要在程序中引入UAC标注,也即让程序显示“UAC盾牌”。这在C++builder中,是通过读取程序在Resource里的MANIFEST资源来决定的,为此,C++builder必须在资源里面嵌入MANIFEST信息。

1.打开记事本,写入下面的内容,并保存成一个名为uac.manifest的文件。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings
xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>True/PM</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>


上述中的requireAdministrator就表示程序需要管理员才能运行。

2.再打开记事本,写入下面的内容,并保存成一个名为uac.rc的文件。

1 24 uac.manifest

3.确保上面两个文件在同一目录下,打开命令行窗口,进入到该目录下,运行brcc32 uac.rc -fo uac.res,回车后会看到该目录下多出了一个资源文件uac.res。

4.以右键选择管理员身份运行C++builder(这点很重要),新建一个VCL Form Application的工程文件,先保存并运行一下。然后把上面生成的uac.res文件拷贝到该工程目录下。点击菜单Project->Add to Project(或按shift+F11),定位到工程目录并选择uac.res文件(注意扩展名过滤)并点击打开,这时应该在项目管理器中可以看到该文件被加入到了工程中。最后打开工程的cpp文件(默认为Project1.cpp),在第二行#pragma hdrstop之前加入一句#pragma
resource "uac.res",接着保存并编译运行整个工程(可直接按F9),这时生成的程序就带有“UAC盾牌”了!找到生成的可执行程序,会看到程序的图标被加上了一个“盾牌”,表示它必须以管理员身份运行。

5.如果需要让生成的程序脱离开发环境独立行动,可点击菜单Project->Options(或按Shift+Ctrl+F11),先找到Linking选项卡,把Dynamic RTL前面的勾去掉;再找到Packages选项卡,把Build runtime packes前的勾也去掉,保存工程并编译,生成的可执行文件就可以在其它未装C++builder的电脑上以管理员身份运行了!

6.如果上面的程序在编译中提示“Unable to create process”,是因为C++builder没有以管理员身份运行!上述过程适用于C++builder2007及以前的版本,若是以后的版本就简单一些了,做完前面的1~3步后,第4步可点击菜单Project->Options,选择Application选项卡,在runtime themes一项中改为use custom manifest就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: