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

Windows 7 開發實作:安裝程式偵測 - .NET Framework 篇

     編輯:關於.NET

實驗概覽

UAC 引入後,應用程式預設以標準使用者權限執行。早期安裝程式需管理員權限寫入 Program Files、HKLM\Software 等受保護位置。Windows Vista/7 內建安裝程式偵測機制:針對無資訊清單的 32 位元執行檔,掃描檔名關鍵字 (setup、install、update),若符合則自動加上盾牌圖示並提權執行。但此機制會誤判一般應用程式 (如 StockUpdater.exe),造成不必要的提權提示;反之,自訂安裝程式若檔名不含關鍵字,又會因未提權而安裝失敗。

學習目標

  • 識別 Windows Vista/7 安裝程式偵測問題
  • 修復誤判與遺漏提權問題

系統需求

  • Microsoft Visual Studio 2008 SP1
  • Microsoft Windows 7

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

任務 1:確認 UAC 已啟用

控制台 > 使用者帳戶 > 變更使用者帳戶控制設定,滑桿保持預設 (勿設為「從不通知」)。

任務 2:識別問題

  1. 開啟 BrokenStockUpdater\Debug 資料夾,切換至中/大圖示檢視。
  2. 發現 BrokenManagedStockUpdater.exe 圖示上有盾牌疊加圖示。
    UAC 設定 盾牌圖示
  3. 雙擊執行 —— 彈出 UAC 提權提示。
  4. 原因: 檔名含 update,且為無資訊清單的 32 位元應用程式,觸發安裝程式偵測誤判。

練習 2:解決問題 (加入資訊清單宣告非安裝程式)

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

  1. 在 Debug 資料夾右鍵 > 新增 > 文字文件,命名為 BrokenManagedStockUpdater.exe.manifest (檔名必須為 <執行檔名>.manifest)。
    提示: 即使檔案為空,盾牌圖示即會消失。
  2. 用記事本編輯,輸入:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0"
    xmlns="urn:schemas-microsoft-com:asm.v1"
    xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
    xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
    xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="StockUpdater"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>
  1. 儲存、關閉編輯器,雙擊 .exe —— 不再彈出 UAC 提示,正常執行。

關鍵屬性: level="asInvoker" 表示「以呼叫者相同權限執行」 (通常為標準使用者),明確宣告非安裝程式。另可用 requireAdministrator (需管理員)、highestAvailable (最高可用權限)。

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

  1. VS 2008 開啟 BrokenStockUpdater.sln,檢查 BrokenManagedStockUpdater 專案屬性 > 應用程式 > 資訊清單:預設為「不含資訊清單建立應用程式」。
  2. 改為 內嵌預設設定的資訊清單 (預設 level="asInvoker")。
    外部資訊清單移除盾牌
  3. 重建方案,刪除外部 .manifest 檔。
  4. 確認盾牌圖示消失,雙擊執行無 UAC 提示。

若需自訂 level 值,可在專案加入「應用程式資訊清單檔」項目,直接編輯 XML。

修復版方案位置

FixedStockUpdater\FixedStockUpdater.sln

總結

  • 安裝程式偵測僅針對無資訊清單的 32 位元執行檔,依檔名關鍵字判斷。
  • 誤判 (一般程式被當安裝程式) → 加入資訊清單 level="asInvoker" 關閉偵測。
  • 遺漏 (真安裝程式未被偵測) → 加入資訊清單 level="requireAdministrator" 強制提權。
  • 最佳實務: 所有正式發布執行檔務必內嵌資訊清單,明確宣告所需執行層級,避免仰賴不確定的偵測邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved