開發 Qt 桌面應用時,發現生成的可執行文件右下角出現黃盾牌圖標(UAC 提升標識),雙擊運行會彈出「用戶賬戶控制」提示。經排查,根因極其隱蔽:程序文件名包含敏感關鍵字「Patch」。Windows 10 根據文件名啟發式判斷是否需要管理員權限,「Patch/Update/Install/Setup」等詞會觸發此行為。
MyPatchTool.exe,圖標右下角有盾牌。MyTool.exe,盾牌消失,正常雙擊運行無 UAC 彈窗。Windows 應用兼容性機制包含安裝程序檢測:
patch、update、install、setup 等關鍵字。OriginalFilename、FileDescription 包含上述詞。requireAdministrator 提升權限。| 方法 | 操作 | 優缺點 |
|---|---|---|
| 重命名文件(最簡單) | 避免敏感詞:PatchTool → ToolKit | 零代碼改動,但可能不符合產品命名 |
嵌入清單聲明 asInvoker | Qt .pro 添加 QMAKE_LFLAGS += /MANIFEST:EMBED,ID=1 並提供 manifest.xml:<requestedExecutionLevel level="asInvoker" uiAccess="false"/> | 強制覆蓋啟發式判斷,標準做法 |
| 設置鏈接器選項 | MSVC: /MANIFESTUAC:level='asInvoker'MinGW: -Wl,--manifest=manifest.xml | 構建系統層面統一控制 |
| 修改資源版本信息 | 移除 VERSIONINFO 中的敏感詞 | 治本,但需維護 .rc 文件 |