如何让生成的程序以管理员身份运行(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的文件。
上述中的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就行了。
在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就行了。
相关文章推荐
- Find the maximum by binary search
- 理解C++编程中的std::function函数封装
- C++中的void类型
- Effective C++学习笔记 chapter 1
- C/C++--char *s 和 char s[] 的区别
- 简单解读C++中的虚函数
- 构造函数
- 帮同学写的C语言小程序(如此谨慎小心的程序)
- c++第4次实验-项目5:贪财的富翁
- Java与C++区别
- C语言脑残错误--猜数游戏
- 归并排序的递归形式与非递归形式(C++版)
- JNI中C/C++调用JAVA类的方法
- C#引用C++开发的DLL
- 读取数量不定的输入数据
- 牛顿插值
- c++多线程操作全局变量的锁的问题
- 雅克比迭代
- 列主元求解矩阵
- 精度问题和类型转换问题