CMake对Windows程序加入UAC支持


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)

文章作者: sfc9982
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 sfc9982 !
  目录