MFC中提升至管理员权限
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC中提升至管理员权限相关的知识,希望对你有一定的参考价值。
void CIniAPIDlg::OnButton1()
CString strName,strTemp;
int nAge;
strName="张三";
nAge=12;
::WritePrivateProfileString("info","Name",strName,"C:\\student.ini");
strTemp.Format("%d",nAge);
::WritePrivateProfileString("info","Age",strTemp,"C:\\student.ini");
}这是MFC的一个按钮事件,作用是在c盘下创建ini文件,如果不用管理员身份启动exe的话是无法创建文件的。如何提升权限?同学说有一个函数可以,我不清楚,特此询问
用以下办法,给应用程序添加一个manifest文件,程序运行时系统就会跳出UAC对话框,获得管理权限。
1.打开应用程序的源代码工程
2.添加一个“custom”资源,"resource type"填24,把资源ID改为1,然后把以下内容复制到资源内容中保存
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="mulitray.exe.manifest"
type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
3.重新编译应用程序,此时会发现,应用程序的图标在Vista下会多出一个小盾标志。
注:requestedExecutionLevel可以指定为三个值:
asInvoker:默认选项,新的进程将简单地继承其父进程的访问令牌。
highestAvailable:应用程序会选择该用户允许范围内尽可能宽松的安全上下文。对于标准用户来说,该选项与asInvoker一样,而对于管理员来说,这就意味着请求非限制访问令牌。
requireAdministrator:应用程序需要管理员的非限制访问令牌。运行该程序时,标准用户将要输入管理员的用户名和密码,而管理原则要在弹出的确认对话框中进行确认。 参考技术A 首先,创建一个文件命名为 ***.manifest 然后将以下内容复制到文件<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="mulitray.exe.manifest"
type="win32"
/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>最后将这个文件导入到工程的资源中,并将资源ID定义为1
Qt Creator开发的程序提升到管理员权限运行
一些功能需要管理员权限,例如启动一个服务,这就需要exe在管理员权限下运行,一个方法是在exe上右键,选择“以管理员身份运行”,或者右键-属性-兼容性-勾选“以管理员身份运行此程序”
另一个方法是在程序中搞定。
在项目的.pro文件中添加
QMAKE_LFLAGS += /MANIFESTUAC:"level=‘requireAdministrator‘uiAccess=‘false‘"
此时点击Run,会提示“启动程序失败,路径或者权限错误?”
可以尝试使用管理员身份启动Qt Creator,我尝试了,还是有问题
以上是关于MFC中提升至管理员权限的主要内容,如果未能解决你的问题,请参考以下文章