如何在Windows应用程序中使用cmake获取管理员权限?

3

我想使用CMake创建一个需要管理员权限的窗口应用程序。

我尝试添加 "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\" /SUBSYSTEM:WINDOWS",但它没有起作用。

环境:Windows10

IDE:VS2017

CMAKE:默认与VS2017一起使用,版本号为3.12.18081601-MSVC_2

add_executable(MSP_D WIN32 ${MSP_D_SRC} msp_d.rc)

SET_TARGET_PROPERTIES(MSP_D PROPERTIES LINK_FLAGS    "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\" /SUBSYSTEM:WINDOWS")

如何解决这个问题?如何实现我的目的? 欢迎提出任何建议。

1
运行cmake生成构建脚本或从源代码构建应用程序通常不需要管理员权限。如果构建后的应用程序需要管理员访问权限,则需要由具有所需特权的用户/进程安装或运行。这通常意味着您需要从具有管理员权限的人那里获得帮助,或者拥有特权帐户的访问权限(例如,用户名和密码)。如果非特权用户能够绕过该需求,那么系统安全性就没有什么意义了。 - Peter
@Peter,是的,我知道。但我想使用这个应用程序来添加HTTPS证书,所以它需要管理员权限。你能帮我解决这个问题吗? - vainman
你将可执行文件命名为 MSP_D,但尝试在 your_executable 上设置目标属性,这显然是行不通的。属性所在的行应该是 SET_TARGET_PROPERTIES(MSP_D PROPERTIES LINK_FLAGS "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\" /SUBSYSTEM:WINDOWS") - GSIO01
@GSIO01 我知道,那是我的编辑错误。但实际上它应该是 MSP_D 而不是你的可执行文件。而且使用 MSP_D 时它不起作用。 - vainman
@Peter 这里的需求是向用户发出信号,表明应用程序需要UAC提升权限才能运行。在Windows上,这与以管理员身份运行是分开的,并且不能通过以管理员身份运行来实现。这是可执行文件的链接器标志。 - tjl
显示剩余3条评论
1个回答

5
你应该使用类似这样的东西。根据你的项目类型,你可能需要更改子系统。
SET_TARGET_PROPERTIES(MSP PROPERTIES LINK_FLAGS "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\" /SUBSYSTEM:WINDOWS")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接