前段时间一直编译x64程序,获取管理员权限也比较简单,直接设置UAC Execution Level为requireAdministrator即可。可是编译Win32程序的时候单独只修改这一项居然不起作用。对比配置之后,发现这个新建的工程的默认配置和x64稍微有点不一样,现在也不记得有哪些不一样了。
做好如此配置后,程序右下角就多了一个护盾图标,双击会申请管理员权限。
对比发现Generate Manifest中,Win32默认为No,然后查看Manifest File对应的路径,里面是一些配置信息
<?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' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
只有权限配置,也就是说只有改动的配置信息,如果没有使用此配置,则程序不具备这些配置,也就是没有管理员权限。百度后发现这个配置也可以有mt.exe手动设置。
例如打开VS2008的命令行,然后执行mt.exe
mt.exe -manifest <manifest-file> -outputresource:<exe-file>
<manifest-file>是配置文件的路径
<exe-file>是编译出来的二进制文件的路径
然后普通的没有权限的二进制文件也过了一个护盾的图标,双击会申请管理员权限了