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

在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"> 
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator"/>
      </requestedPrivileges>
    </security>
</trustInfo>
</assembly>
上述中的requireAdministrator就表示程序需要管理员才能运行。
2.再打开记事本,写入下面的内容,并保存成一个名为uac.rc的文件。
   1  24  uac.manifest
3.确保上面两个文件在同一目录下,打开命令行窗口,进入到该目录下,运行brcc32 uac.rc -fouac.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就行了。

按以上操作后,会发现编译后的程序外观样式会变为传统XP的样式,不太好看。怎么改回来呢?
其实,在程序编译时会有一条警告信息产生,如下:“[ILINK32 Warning] Warning: Duplicate resource:  Type 24 (user-defined), ID 1; File D:\DOCUMENTS\VFS150.TMP resource kept; file D:\DOCUMENTS\UAC.RES resource discarded.”,说明有资源冲突产生。在C++builder2007中,加入了对vista及以后版本外观样式的支持,使程序的界面更好看了。点击菜单Project->Options,选择Application选项卡,可看到有一项名为Enable Runtime themes的选项,默认是钩选上的,即使用新的Windows外观样式。把勾去掉后再编译程序,会发现程序界面回到了传统的XP样式。所以,程序在加入UAC后,其资源会与该项发生冲突,因此程序界面才会回到传统的XP样式!如何解决呢?下面给出一种较为简单的方法:
1、去除Enable Runtime themes选项,即不钩选。
2、把前面的uac.manifest文件内容更换成如下形式:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
 <security>
  <requestedPrivileges>
    <requestedExecutionLevel
     level="requireAdministrator"/>
  </requestedPrivileges>
 </security>
</trustInfo>
<assemblyIdentity
  version="1.0.0.0"
  processorArchitecture="X86"
  name="CompanyName.ProductName.YourApplication"
type="win32"/>
<description>
  Your application description here.
</description>
<dependency>
  <dependentAssembly>
    <assemblyIdentity
      type="win32"
      name="Microsoft.Windows.Common-Controls"
      version="6.0.0.0"
      processorArchitecture="X86"
      publicKeyToken="6595b64144ccf1df"
      language="*"
     />
  </dependentAssembly>
</dependency>
</assembly>
3、其余重复前面的步骤。
再重新编译程序后,会发现警告信息没有了,程序界面也保持了新的样式,而不会再回到XP样式了。

原文地址:https://www.cnblogs.com/fxzq/p/12262294.html

时间: 2024-10-03 22:40:31

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

c#程序以管理员身份运行(三种办法)

三种办法: 一.设置程序本身的属性:勾选"以管理员身份运行此程序",必要时设置"更改所有用户设置-以管理员身份运行此程序",当然这种办法是被动的,也不是最实际的办法: 二.代码法: static void Main(string[] Args) { /** * 当前用户是管理员的时候,直接启动应用程序 * 如果不是管理员,则使用启动对象启动程序,以确保使用管理员身份运行 */ //获得当前登录的Windows用户标示 System.Security.Principa

如何让程序以管理员身份运行

一.让所有程序都以管理员身份运行 直接启用administrator账户,因为在administrator账户下本身就是超级管理员权限,就无所谓点右键“以管理员身份运行”了(但这样会导致系统安全性有所降低). 右键单击桌面“计算机”,选择“管理” 在页面左侧,依此打开“系统工具→本地用户和组→用户”,在右侧找到“Administrator”,双击打开,在打开页面选择常规栏目,去掉“账户已禁用”前的“√”,点击应用,确定.这样设置后,即可实现让所有程序都以管理员身份运行. 二.对部分快捷方式软件以

将所发布的WinFrom程序以管理员身份运行

右键所发布的WinForm程序安装文件"setup.exe"->以管理员身份运行->安装该程序 安装完之后,再在任务管理器里找到该程序,右键程序进程->属性->兼容性->以管理员身份运行 (还有其他方法可以使得所开发的程序以管理员身份运行,例如可以在VS发布WinForm程序时作些配置,使得在发布后安装时要求以管理员身份运行)

c#通过app.manifest使程序以管理员身份运行

通常我们使用c#编写的程序不会弹出这个提示,也就无法以管理员身分运行.微软的操作系统使用微软的产品方法当然是有的,通过app.manifest配置可以使程序打开的时候,弹出UAC提示需要得到允许才可以继续,这样就获得了管理员的权限来执行程序 微软在Windows Vista开始引入了UAC(用户帐户控制)新技术(点击这儿了解什么是UAC).当程序执行时需要权限的话,UAC会弹出警告消息:让用户确认是否同意允许这个程序改变你的计算机配置,windows需要得到你的许可才可以让程序继续执行下去. 通

C#让程序以管理员身份运行程序

步骤:一: 在Visual Studio 中--解决方案资源管理器--右键项目名称--属性,找到“安全性”选项 二:勾选“启用ClickOnce安全设置”, 三:这时,在项目下面会多出一个“app.manifest”的文件,选中它,并找到代码段<requestedExecutionLevel level="asInvoker" uiAccess="false" />,将其改为:<requestedExecutionLevel level="

C#程序以管理员身份运行

选中"Security",在界面中勾选"Enable ClickOnce Security Settings"后,在Properties下就有自动生成app.manifest文件. 打开app.manifest文件,将 <requestedExecutionLevel  level="改为 <requestedExecutionLevel level="requireAdministrator" uiAccess="

Delphi生成EXE自动以管理员身份运行

[测试环境]Windows 7 旗舰版 With Sp1,RAD 10 Seattle 1.文本文件:UAC.manifest <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

c#通过app.manifest使程序 右键 以管理员身份运行

c#通过app.manifest使程序以管理员身份运行 时间:2013-06-27 22:47来源:网络收集+本站整理 作者:jtydl 点击: 1175 次 微软在Windows Vista开始引入了UAC(用户帐户控制)新技术(点击这儿了解什么是UAC).当程序执行时需要权限的话,UAC会弹出警告消息:让用户确认是否同意允许这个程序改变你的计算机配置,windows需要得到你的许可才可以让程序继续执行下去. 通常我们使用c 微软在Windows Vista开始引入了UAC(用户帐户控制)新技

C#默认以管理员身份运行程序

由于WIN8的权限限制,很多程序安装后没有写入权限,导致程序无法正常运行,以下是让程序以管理员身份运行,解决此问题 static void Main(string[] Args) { /** * 当前用户是管理员的时候,直接启动应用程序 * 如果不是管理员,则使用启动对象启动程序,以确保使用管理员身份运行 */ //获得当前登录的Windows用户标示 System.Security.Principal.WindowsIdentity identity = System.Security.Pri