如何消除Qt项目部署后弹出的“未知发布者修改设备”警告?
问题描述
使用Qt Creator开发的项目部署完成后,每次启动都会弹出“是否允许来自未知发布者的应用更改你的设备?”的UAC警告。已提交文件进行恶意软件分析,希望消除该警告,或让其仅首次显示。
我的manifest文件
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> </assembly>
我的部署步骤
- 以Release模式构建项目
- 将静态库复制到同一文件夹
- 执行命令:
C:\mt -manifest C:\QtProject\projectName\app.manifest.xml -outputresource:ProjectName.exe;1 - 执行命令:
..\windeployqt C:\QtProject\build-PprojectName-Desktop_Qt_5_12_2_MinGW_64_bit-Release\release\projectName.exe - 进入deploy/windows目录
- 执行命令:
C:\Qt\Tools\QtInstallerFramework\4.5\bin\binarycreator -c config/config.xml -p packages -f projectNameSetup
解决方案
1. 代码签名(消除“未知发布者”警告的根本方法)
这个警告的核心原因是程序未经过代码签名,Windows无法识别发布者身份。
- 购买正规的代码签名证书(如DigiCert、GlobalSign等机构提供的证书)
- 使用signtool工具对
projectName.exe及生成的安装包projectNameSetup进行签名
签名完成后,系统会识别你的发布者信息,UAC警告会显示发布者名称,不再提示“未知发布者”。
2. 调整程序权限需求(减少UAC触发)
你的manifest文件设置了level="requireAdministrator",意味着程序每次启动都需要管理员权限,必然触发UAC提示。如果程序实际不需要管理员权限:
- 将manifest中的
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />改为以下两种之一:level="asInvoker":以当前用户权限运行,通常不会触发UAClevel="highestAvailable":以当前用户能获得的最高权限运行,仅当用户为管理员时可能触发UAC
修改后重新打包部署,即可避免不必要的UAC提示。
3. 关于“仅首次显示”的说明
Windows的UAC提示无法通过程序设置让其仅显示一次,这是系统级安全策略。用户可自行调整系统的UAC通知级别(控制面板→用户账户→更改用户账户控制设置),但这属于用户的系统设置,开发者无法强制控制。
内容的提问来源于stack exchange,提问作者Shaiful Islam
相关产品推荐
相关产品推荐

