程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 7開發:安裝程序檢測 - 白皮書

Windows 7開發:安裝程序檢測 - 白皮書

編輯:關於.NET

介紹

伴隨著用戶帳戶控制( UAC )在 Windows Vista 中的出現,應用程序在默認情況下都是 以標准用戶的權限來運行的。這對於早期版本的應用程序會是一個問題,因為他們將以管理 員權限來運行(在 Windows Vista 之前的版本中通常也是如此)。然而一些項目需要以管理 員的權限來運行,多數安裝程序顯然需要對特殊權限的位置進行寫入操作,例如: ProgramFiles 文件夾或者是注冊表中的 HKEY_LOCAL_MACHINE 。這些項目都將失敗並收到拒 絕訪問錯誤。

在 Windows Vista 中要對此進行修復,操作系統將會進行一些監測以確定它是不是可執 行的,事實上它是不是一個安裝程序,如果是,系統會為其提升至管理員權限。但是,有時 候這些檢測自身也可能會引發問題。

它是如何工作的

所有的沒有清單文件(外部的或是內置的)的 32 位應用程序都會進行安裝偵測。操作系 統假設這些應用程序都是“早期版本”,它們都將以管理員權限來運行。

偵測方法包含了查看文件名並搜索文件名中是否包含關鍵字“ setup ”“ install ”和 “ update ”,如果找到了,一個盾牌似的圖標的會覆蓋在原有圖標上,就像下面顯示的 Windows 資源管理器的圖標一樣,表明這個應用程序需要管理員權限來正確運行。

問題

雖然這個偵測可以使早期版本的安裝程序可以在 Windows Vista 或者以後版本的操作系 統中正確的運行,它也可以引起對一些非安裝應用程序進行不必要的權限提升(例如, StockUpdater.exe )。這些應用程序對於偵測來講是需要提升權限的,但是在嚴格意義上來 講可能並不需要。這可能給用戶帶來安全隱患和麻煩,並且由於害怕它們可能給它們的系統 帶來損害,用戶可能會放棄使用該應用程序。

反過來也仍然會有問題。一個不使用 Microsoft Windows Installer ( MSI )並且沒有 按照偵測法命名的自定義的安裝程序,可能確實需要以管理員權限來運行。但是由於偵測沒 有把它識別為一個安裝程序,沒有添加類似盾牌的圖標或者沒有提升權限,應用程序可能會 在安裝的過程中失敗。

解決方案

最直接的解決方案是添加清單文件。如果應 用程序源不可用,那麼只能在包含可執行文件的文件夾中添加一個外部清單文件。該清單文 件的名稱應該使用與可執行文件相同的名字並在其後面加上“ .manifest ”(例 如, StockUpdater.exe.manifest )。這個清單文件應該定義了應用程序何時需要管理員權 限,或者使用標准用戶權限就可以成功運行了。

一個標准的的清單文件應該和下面的 看起來類似 :

<?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="http://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>

例子中,紅色的文字顯 示了清單文件中包含級別屬性的有效部分 :

•   asInvoker – 表明應用 程序應該使用創建者權限來運行。這意味著應用程序是以和 Windows 資源管理器擁有同樣級 別的權限來運行的,通常是標准用戶權限。這個應用程序並不是一個安裝程序並且不會被偵 測所標記。

•  requireAdministrator – 表明該應用程序應該以管理員 權限來運行(可能由於它是一個安裝程序)。

•  highestAvailable – 表明該應用程序應該以可以達到的最高的權限級別來運行。如果用戶是管理員,那麼效果就 和 requireAdministrator 一樣了。

如果源代碼可用,您可以使用 Microsoft Visual Studio  2008 用戶界面來添加一個清單文件。新項目通常在默認情況下會包含一個 清單文件。

總結

安裝偵測通過確定 “早期版本的”項目為安裝程 序,來允許這些程序正常運行。但是,這些偵測可能會導致不需要的結果。系統只會對沒有 清單文件的 32 位可執行文件進行偵測。可以通過添加一個清單文件來去除不必要的偵測並 指定所期望的行為。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved