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

Windows 7 開發實作:安裝程式偵測 - Win32 Native (C++) 篇

     編輯:關於.NET

實驗概覽

同 .NET 篇,針對原生 C++ (Win32) 應用程式展示安裝程式偵測誤判與修復。偵測邏輯相同:無資訊清單的 32 位元執行檔 + 檔名含 setup/install/update 關鍵字 → 自動加盾牌提權。本實驗示範透過外部資訊清單與專案內嵌資訊清單兩種方式修正。

系統需求

  • Microsoft Visual Studio 2008 SP1
  • Microsoft Windows 7

練習 #1:安裝程式偵測問題重現

任務 1:確保 UAC 啟用

同 .NET 篇:控制台 > 變更 UAC 設定,滑桿預設位置。

任務 2:識別問題

  1. 開啟 BrokenStockUpdater\Debug,中/大圖示檢視。
  2. BrokenNativeStockUpdater.exe 顯示盾牌疊加圖示。
    盾牌圖示
  3. 雙擊執行 → 彈出 UAC 提權提示。
  4. 原因:檔名含 update,無資訊清單 32 位元執行檔,觸發偵測。

練習 #2:解決問題

任務 1:新增外部資訊清單

  1. 在 Debug 資料夾新增文字文件 BrokenNativeStockUpdater.exe.manifest (空檔即可移除盾牌)。
    外部資訊清單移除盾牌
  2. 編輯內容 (同 .NET 版):level="asInvoker"。
  3. 雙擊 .exe 驗證:無 UAC 提示,正常執行。

任務 2:內嵌資訊清單 (專案屬性設定)

  1. VS 2008 開啟 BrokenStockUpdater.sln,檢查 BrokenNativeStockUpdater 專案屬性:
  2. 連結器 > 資訊清單檔 > 產生資訊清單 = 否 (預設為是)。
    連結器停用產生資訊清單
  3. 改為 產生資訊清單 = 是。
  4. UAC 執行層級 設為 asInvoker (或 requireAdministrator/highestAvailable)。
    設定 UAC 執行層級
  5. 資訊清單工具 > 輸入和輸出 > 內嵌資訊清單 = 是 (嵌入為 Win32 資源,無需外部檔案)。
    內嵌資訊清單
  6. 重建方案,刪除外部 .manifest。
  7. 確認盾牌消失,雙擊無 UAC 提示。

修復版方案位置

FixedStockUpdater\FixedStockUpdater.sln

總結

  • 安裝程式偵測僅作用於無資訊清單的 32 位元映像。
  • 檔名關鍵字 (setup/install/update) 觸發誤判 → 加入資訊清單 asInvoker 關閉偵測。
  • 真安裝程式未被偵測 → 加入資訊清單 requireAdministrator 強制提權。
  • C++ 專案透過連結器 > 資訊清單檔 > UAC 執行層級 設定,並勾選內嵌資訊清單 達成單一檔案部署。
  • 鐵律: 所有發布執行檔必須內嵌資訊清單,明確宣告執行層級,不可仰賴偵測推測。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved