VC如何将自身进程提升至管理员权限

方法1、代码实现

    http://zhidao.baidu.com/question/260744247.html

方法2、编译选项设置

       http://msdn.microsoft.com/zh-cn/library/bb384691.aspx

方法3、在资源文件中添加一个自己的manifest文件

方法1、代码实现

3.67 icePub_runByAdmin

l 函数原型:
int WINAPI icePub_runByAdmin(char *strAppPathName,char *strSuParam)
输入:strAppPathName 带路径应用程序文件名;为空则默认本身应用程序
strSuParam 以管理员权限启动程序的命令行参数;为空则默认为"su "
输出:

l VC连接Lib方式声明
__declspec(dllexport)
int WINAPI icePub_runByAdmin(char *strAppPathName,char *strSuParam);

l 动态调用例程
VC sample 代码:
int runByAdmin(void)
{
int retCode=-1;

typedef int (WINAPI ICEPUB_RUNBYADMIN)(char *strAppPathName,char *strSuParam);
ICEPUB_RUNBYADMIN *icePub_runByAdmin = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
  icePub_runByAdmin = (ICEPUB_RUNBYADMIN *)GetProcAddress(hDLLDrv, "icePub_runByAdmin");

if(icePub_runByAdmin)
  retCode=icePub_runByAdmin("","");
if(hDLLDrv)
  FreeLibrary(hDLLDrv);

if(retCode == 0)
    exit(0);
if(retCode == -1)
  AfxMessageBox("以管理员启动失败,请手动启动");

return retCode;
}

方法2、编译选项设置

/MANIFESTUAC(将 UAC 信息嵌入到清单中)

Visual Studio 2010

指定是否将用户帐户控制 (UAC) 信息嵌入到程序清单中。

/MANIFESTUAC
/MANIFESTUAC:NO
/MANIFESTUAC:fragment
/MANIFESTUAC:level=_level
/MANIFESTUAC:uiAccess=_uiAccess
fragment

一个字符串,它包含 leveluiAccess 值。 有关更多信息,请参见本主题中后面的“备注”部分。

_level

asInvoker、highestAvailable 或 requireAdministrator 之一。 默认为 asInvoker。 有关更多信息,请参见本主题中后面的“备注”部分。

_uiAccess

如果您希望应用程序绕过用户界面保护级别并将输入引导到桌面上的更高权限窗口(如屏幕键盘),则为 true;否则为 false 默认为 false 仅针对用户界面辅助功能应用程序设置为 true

如果您在命令行上指定多个 /MANIFESTUAC 选项,则最后输入的选项优先级最高。

/MANIFESTUAC:level 的选项包括:

  • asInvoker:应用程序将使用与启动它的进程相同的权限运行。 可通过选择“以管理员身份运行”将应用程序提升为更高权限。

  • highestAvailable:应用程序将使用可能的最高权限级别运行。 如果启动该应用程序的用户为管理员组的一个成员,则此选项与 requireAdministrator 相同。 如果可用的最高权限级别高于打开进程的级别,则系统将提示提供凭据。

  • requireAdministrator:应用程序将使用管理员权限运行。 启动该应用程序的用户必须是管理员组的一个成员。 如果打开进程未使用管理权限运行,则系统将提示提供凭据。

您可以通过使用 /MANIFESTUAC:fragment 选项在一个步骤中指定 level 和 uiAccess 值。 代码片段的格式必须是:

"level=[ asInvoker | highestAvailable | requireAdministrator ] uiAccess=[ true | false ]"

在 Visual Studio 开发环境中设置此链接器选项

  1. 打开该项目的“属性页”对话框。 有关详细信息,请参见如何:打开项目属性页

  2. 展开“配置属性”节点。

  3. 展开“链接器”节点。

  4. 选择“清单文件”属性页。

  5. 修改“启用用户帐户控制(UAC)”“UAC 执行级别”“UAC 绕过 UI 保护”属性。

以编程方式设置此链接器选项

方法3、

在MinGW或VS 2005 SP1环境下创建一个要求UAC权限的程序。

之前在给U盘挂自制操作系统的那篇教程里,我给写了一个pdev程序用来输出windows下,系统各磁盘的主引导记录。

不过那个程序用起来每次都要记得用管理员权限启动程序,这多少增加了不便。(特别是对带UAC功能的win7\vista来说)。

如果能让程序启动时自动要求提权,那当然更符合windows程序的一般习惯。

我查到了一篇这种做法的教程:

http://www.zu14.cn/2010/05/14/delphi-win32-program-on-windows7-vista-uac-administrator-rights/

也就是需要用到以下这个xml文件(保存成uac.manifest文件,不过还可以保存成任意的.manifest文件也行。

ContractedBlock.gif ExpandedBlockStart.gif 程序清单文件
 
         
<? 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 >

下面具体讲讲在MinGW或者VS2005 SP1的情况下该怎么做。

VS2005下简单,只需要在项目的资源里加这个uac.manifest文件即可。

我在VS2005的“添加资源”一项里没有找到“添加程序清单”,索性我选择了添加xml文件,并保存为uac.manifest,把以上内容复制到文件中,

再编译,就生成了启动时会提示UAC提权的提示框。(这种要求UAC提权的程序不能直接用F5调试运行,在VC里如果要直接看效果可以按Ctrl + F5 直接运行)。

转载于:https://www.cnblogs.com/carl2380/archive/2011/07/07/2100096.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值