Windows 上的二进制出现可能会遇到需要 Administrator 权限的操作。除了选择“以管理员身份运行”方式来运行程序,还可以通过 Manifest 的方法来提示系统自动使用 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' uiAccess='false'/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
方法 1
使用微软的 mt.exe
mt.exe -manifest "uac.manifest" -outputresource:"a.exe";#1
方法 2
链接器参数
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS
"/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\"")
方法 3
使用资源文件
// uac.rc
#include <winuser.h>
#define ID_MANIFEST 1
#ifndef RT_MANIFEST
#define RT_MANIFEST MAKEINTRESOURCE(24)
#endif
ID_MANIFEST RT_MANIFEST "uac.manifest"
list(APPEND SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/uac.rc)