MFC中怎样让应用程序获得或以管理员权限运行

本文介绍如何让VS2010开发的应用程序在Windows系统上获得管理员权限,包括通过修改VS2010的启动选项以及调整应用程序的清单文件来实现不同级别的权限提升。

原文:原文博客



ShellExecuteEX编程 --- 获取管理员权限:http://blog.youkuaiyun.com/jhui163/article/details/5873027

怎样让你的应用程序获得管理员权限:就是在运行开发工具如vc6.0 或vs2010时,要以管理员身份运行,这样你的应用程序才可以继承

http://bbs.youkuaiyun.com/topics/390262991

 

解决:在vs2010等开发工具中虽然以管理员身份编译运行了程序,可以获得管理员权限,但是当单独点击Debug或release版时,又好像没有获得管理员权限,第一次点击不行,第二次才获得管理员权限

方法一:

1找到VS2010的快捷方式:右击——“打开文件位置”
找到VS2010的启动项目devenv.exe:右击——属性——兼容性——特权等级,以管理员权限运行;如果需要每个用户都以管理员权限运行,还可以“更改所有用户的设置”——特权等级,以管理员权限运行。
然后在项目的打开方式中确保以VS2010为默认打开程序就好了。

2 属性--连接器--清单文件-》UAC执行级别-》requireAdministrator (/level='requireAdministrator')

方法二

清单文件:建立如app.mainfest的清单文件,在项目(属性--连接器--清单文件)添加清单文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentityversion="1.0.0.0" processorArchitecture="X86" name="VistaLogoDemo" type="win32"/>
  <description>Description of your application</description>
  <!-- Identify the application security requirements.-->
  <trustInfoxmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
  <requestedPrivileges>
  <requestedExecutionLevellevel="requireAdministrator" uiAccess="false"/>
  </requestedPrivileges>
  </security>
  </trustInfo>
 </assembly>
参考链接:http://blog.youkuaiyun.com/penglijiang/article/details/7178594


MFC(Microsoft Foundation Class Library)是一个由微软提供的C++类库,用于简化Windows API的使用。在某些情况下,运行MFC应用程序需要提升到管理员权限,例如修改受保护的操作系统文件、安装驱动等。 以下是几种常见的方式让MFC程序请求并获得系统的管理员权限: ### 1. **通过清单文件(Manifest File)设置** 可以为您的MFC项目添加一个应用清单文件,并指定`requireAdministrator`选项来要求管理员权限。 - 打开项目的属性页,在“链接器”->"输入" 中确保启用了manifest生成功能。 - 修改自动生成的 manifest 文件或将以下内容嵌入其中: ```xml <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> ``` 当用户尝试启动该应用程序时,操作系统会显示UAC提示框询问是否授予管理权限。 --- ### 2. **动态请求管理员权限 (ShellExecute)** 如果仅需特定操作具有管理员权限而无需整个程序都处于此状态,则可以利用 `ShellExecute` 函数创建一个新的进程实例并且以最高权限级别运行。 示例代码如下所示: ```cpp void RunAsAdmin() { SHELLEXECUTEINFO sei = { sizeof(sei) }; // 设置要执行的应用路径及参数. sei.lpVerb = _T("runas"); sei.lpFile = _T("YourApp.exe"); // 应用名或完整路径 sei.hwnd = NULL; // 父窗口句柄(可选) sei.nShow = SW_SHOWNORMAL; if (!ShellExecuteEx(&sei)) { DWORD dwError = GetLastError(); if (dwError == ERROR_CANCELLED){ MessageBox(_T("您拒绝了管理员权限"),_T("错误")); } } } ``` 在此例子中,“runas” 动词指示 shell 要求用户验证其凭据以允许当前软件作为超级用户账户来运行. --- ### 3. **检测当前是否有管理员权限** 有时我们还希望先检查自身是不是已经具备足够的特权再做下一步动作。下面给出一段简单的测试函数供参考: ```cpp bool IsRunAsAdmin() { BOOL fRet = FALSE; HANDLE hToken = NULL; if ( OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken ) ) { TOKEN_ELEVATION Elevation; DWORD cbSize = sizeof(TOKEN_ELEVATION); if ( GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize) ) { fRet = Elevation.TokenIsElevated; } } if (hToken) CloseHandle(hToken); return (fRet==TRUE ? true : false ); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值