開發 Qt 應用時,發現生成的可執行文件圖標右下角自帶「盾牌」標識,雙擊運行會彈出 UAC 提示請求管理員權限。這究竟是什麼原因?如何解決?
經排查,可執行文件名稱包含敏感關鍵字「Patch」(如 MyPatchTool.exe、HotPatch.exe)。Windows 10 的 UAC(用戶賬戶控制)內置啟發式檢測機制,會根據文件名關鍵字判斷程序是否可能需要管理員權限:
Install、Setup、Update、Patch、Uninstall 等詞彙requestedExecutionLevel一旦命中,Windows 會自動要求以管理員身份運行,並在圖標上顯示盾牌。
將輸出文件名從 PatchTool.exe 改為無敏感詞的名稱,如 MyTool.exe、Updater.exe 等。重新構建後盾牌消失,不再彈 UAC。
在項目 .pro 文件中添加:
# 指定清單文件
win32 {
RC_FILE = app.rc
}
創建 app.rc:
#include
1 24 "app.manifest"
創建 app.manifest:
level="asInvoker" 明確聲明「以調用者權限運行」,Windows 將不再啟發式提升權限。
在 .pro 中直接嵌入清單(需 Qt 5.3+):
win32 {
QMAKE_LFLAGS += /MANIFEST:EMBED,ID=1
# 或者使用 qmake 內置變量
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01 /MANIFEST:EMBED,ID=1
}
並確保項目目錄下有正確的 manifest 文件。
Windows 10 的啟發式 UAC 檢測雖旨在保護用戶,但常誤傷合法開發工具。避免在文件名中使用 Install/Setup/Patch/Update 等敏感詞,或顯式嵌入清單聲明執行級別,即可徹底解決。建議採用方案 2,一勞永逸且符合 Windows 應用發布規範。