Windows Vista 上的 Windows Installer 部署

更新:2007 年 11 月

Windows Installer 技術支援在 Windows Vista 作業系統上的軟體安裝。在 Windows Vista 上安裝應用程式的使用者,應該只會收到需要提高權限之每項元件安裝的提示,即使使用者的電腦是在使用者帳戶控制 (User Account Control,UAC) 下執行也是如此。如需設定 UAC 的方法之詳細資訊,請參閱 Windows Vista 和 Visual Studio

應用程式提高權限

通常,Setup.exe (又稱為「啟動載入器」(Bootstrapper)) 不會以提高權限的方式執行,而是會在目前使用者的權限層級下執行。因此,當最終的應用程式安裝啟動時,應用程式並不會提示要求提高權限。不過請注意,.msi 檔案通常都會提示使用者,Setup.exe 則不會這樣做。

在啟動載入器的內嵌 UAC 資訊清單中,requestedExecutionLevel 節點會指定以目前的使用者 (asInvoker) 執行安裝:

<requestedExecutionLevel level="asInvoker" />

不過,在必要時,您可以將應用程式安裝提高權限。例如,修改 Web 安裝專案中的網際網路資訊服務 (Internet Information Services,IIS) 設定,便需要系統管理員權限,將組件 (Assembly) 安裝到全域組件快取也是如此。提高權限提示會在必要條件安裝之後,以及應用程式安裝之前發生。

若要使安裝提高權限,請開啟專案 (.vdproj) 檔。在專案檔的 [MsiBootstrapper] 區段,將 [RequiresElevation] 屬性設定為 [True]。這個屬性並沒有透過 Visual Studio 整合式開發環境 (Integrated Development Environment,IDE) 提供。因此,您必須使用專案檔。如需詳細資訊,請參閱 RequiresElevation 屬性

系統管理員協助的提高權限

Windows Installer 支援 Windows Vista 上的系統管理員協助提高權限。在此案例中,使用者會收到要求系統管理員認證的提示,系統管理員則會為使用者輸入密碼。為了支援這種案例,當您的電腦在 Windows Vista 或更新版的 Windows 上執行時,啟動載入器便會將 [AdminUser] 屬性設定為 [True]。

注意事項:

如果在不使用 UAC 的電腦上執行 Windows Vista,而您不是系統管理員,則 [AdminUser] 仍是設定為 [True]。因此,.exe 安裝程式 (例如 SQLExpress32.exe) 應該被撰寫為偵測適當的權限,並在權限不足的情況下,產生特定的結束代碼 (Exit Code)。您應該撰寫 Setup.exe 以攔截此結束代碼,並顯示訊息表示需要系統管理員。

必要條件提高權限

Windows Vista 會在需要時將必要元件安裝提高權限。啟動載入器本身不會執行提高權限,當 Windows Vista 在 UAC 下執行時,便會針對每個必須提高權限的必要條件元件發出提示 (除非已安裝該元件)。如果套件提高權限失敗,啟動載入器便會失敗並傳送適當的錯誤訊息。

自訂動作提高權限

您在 [自訂動作編輯器] 中建立的自訂動作,都會以提高權限的方式執行。自訂動作不應該存取使用者的特定資料,例如登錄或檔案系統,因為自訂動作不會在叫用的使用者帳戶中執行。

根據預設,由於 [自訂動作編輯器] 中的 [NoImpersonate] 屬性預設值是 [True],自訂動作都會以提高權限的方式執行。將 [NoImpersonate] 變更為 [False] 便會強制自訂動作模擬叫用的使用者,該使用者則可能僅有降低的權限。

Visual Studio 版本之間的差別

並請注意,Visual Studio 2005 和 Visual Studio 2008 安裝專案在 Windows Vista UAC 之下執行的方式將會有所不同。

當您在 UAC 下執行時,Windows Vista 內建安裝程式偵測便會提示要求同意。以 Visual Studio 2005 建置的啟動載入器 (Setup.exe) 則是無論安裝何種項目,永遠都會提示要求同意。由於 Setup.exe 及其所有處理序 (Process) 都是以系統管理員語彙基元 (Token) 在 Windows Vista 上執行,最終的應用程式安裝便會以提高權限的方式進行。如果使用者是以系統管理員協助的提高權限執行 Setup.exe,應用程式便會在提高權限之使用者的設定檔 (而非系統管理員的設定檔) 下安裝。

在 Visual Studio 2008 中,Setup.exe 的行為已經變更,它並不會在啟動時提示要求提高權限。為了避免提高權限的提示,啟動載入器的內嵌資訊清單會指定 Setup.exe 以 asInvoker 所要求的執行層級來執行。這樣便能提供最終應用程式安裝不會以提高權限執行的效益,不過依然讓必要條件元件的安裝能夠視需要提高權限。啟動載入器會呼叫 ShellExecute 啟動必要條件。Windows Vista 會接收這個呼叫,並執行安裝偵測,在安裝之前發出使用者提示。

這項變更的缺點在於,除了應用程式本身以外,還會針對每個必須安裝的必要條件元件都發出提示。不過,如果所有的必要條件元件都已經在電腦上,安裝就可能不會產生任何提示。而且,您也不應該擁有需要提高權限的外部檢查。除了安裝程式的提示以外,外部檢查運作時,每個外部檢查都會讓使用者收到數個提高權限提示。

請參閱

概念

Windows Vista 上的 Windows Installer 部署

Windows Vista 和 Visual Studio

使用者權限和 Visual Studio

其他資源

Windows Installer 部署概念