首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC++ 專案嵌入 Manifest 申請 UAC 管理員權限:Vista/Win7/Win10/Win11 通用方案

     編輯:關於VC++

需求背景

Vista 引入 UAC (User Account Control),需管理員權限的操作 (寫入 Program Files、註冊表 HKLM、服務控制、磁碟分割等) 必須提升權限。Manifest 中宣告 requireAdministrator 可讓執行檔啟動時自動彈出 UAC 提示,圖示上會出現盾牌圖示。

Manifest 內容


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="X86"
    name="MyApp.exe"
    type="win32"
  />
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

level 可選值:

  • asInvoker — 以呼叫者權限執行 (預設,不彈 UAC)
  • highestAvailable — 取得呼叫者能取得的最高權限
  • requireAdministrator — 強制要求管理員權限 (彈 UAC)

嵌入專案資源的方法

方法一:VC6 手動加入 Custom Resource

  1. 資源檢視 → 右鍵 Add Resource → 選擇 Custom
  2. Resource Type 輸入 24 (RT_MANIFEST)
  3. 資源 ID 設為 1 (對應 CREATEPROCESS_MANIFEST_RESOURCE_ID)
  4. 貼上上述 XML 內容

方法二:命令列工具 mt.exe (適用單一 EXE)


mt.exe -manifest MyApp.exe.manifest -outputresource:MyApp.exe;1

可整合至專案 Post-Build Event 自動化。

方法三:Visual Studio 2005+ 專案屬性

專案屬性 → Linker → Manifest File → UAC Execution Level → Require Administrator。IDE 會自動產生並嵌入 Manifest。

驗證方式

  1. 編譯產生 EXE
  2. 檔案總管中檢視:圖示右下角出現 盾牌圖示
  3. 雙擊執行:彈出 UAC 同意提示對話框
  4. 工具驗證:mt.exe -inputresource:MyApp.exe;1 -out:check.manifest 查看嵌入內容

注意事項

  • 64 位元應用請將 processorArchitecture 改為 amd64 或 X64
  • 若應用需 UI 自動化存取其他視窗,設 uiAccess="true" (需簽章且放在安全路徑)
  • Manifest 嵌入後,不可再使用外部 .manifest 檔案,否則會衝突
  • Windows XP 忽略此 Manifest,正常執行
  • 原始碼下載

    VC6 專案範例:含手動加入 Manifest 資源步驟截圖、mt.exe 批次檔與編譯後驗證截圖。

    本文配套源碼

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved