You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除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":以当前用户权限运行,通常不会触发UAC
    • level="highestAvailable":以当前用户能获得的最高权限运行,仅当用户为管理员时可能触发UAC
      修改后重新打包部署,即可避免不必要的UAC提示。

3. 关于“仅首次显示”的说明

Windows的UAC提示无法通过程序设置让其仅显示一次,这是系统级安全策略。用户可自行调整系统的UAC通知级别(控制面板→用户账户→更改用户账户控制设置),但这属于用户的系统设置,开发者无法强制控制。


内容的提问来源于stack exchange,提问作者Shaiful Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:17:39