Visual Studio Installer 部署
Windows Installer 部署可讓您建立安裝程式套件散發給使用者,而使用者會執行安裝程式,逐步執行精靈安裝應用程式。 這是藉由將「安裝」專案加入至方案中達成的。 在建置時,專案便會建立可散發給使用者的安裝檔案,使用者則會執行安裝檔案,並會逐步執行精靈安裝應用程式。
Microsoft Windows Installer 是一種資料驅動型安裝和組態服務,隨附於 Windows 作業系統中。 Windows Installer 會維護每個已安裝之應用程式的資訊資料庫,包括檔案、登錄機碼和元件。 在取消安裝應用程式時,必須檢查資料庫以確認沒有其他應用程式必須依賴某個檔案、登錄機碼或元件,才可以進行移除。 這樣可以防止移除某應用程式後,導致另一個程式遭到破壞。
注意事項 |
---|
Express 版並未包含 Windows Installer 技術。 如需 Express 版所使用的部署技術的詳細資訊,請參閱 ClickOnce 安全性和部署。 |
搭配使用 Visual Studio 中的部署工具與 Windows Installer 所提供的功能,就可以部署和維護應用程式。
建立 Installer 套件
您應該使用 Installer 套件來部署應用程式和其必要條件。 一般而言,應用程式依存於 .NET Framework、SQL Server Express 或甚至是自訂的 EXE 或 DLL。 不過,並不確定使用者電腦是否具有特定版本的 .NET Framework 或應用程式所依賴的其他相依性。 因此,不建議將應用程式複製到使用者電腦。
安裝位置
您的使用者可以從 Web、CD、網路檔案共用或其他替代項目安裝應用程式。 安裝位置會影響您可以使用的專案範本。 例如,如果您想要使用者從 Web 進行安裝,則可以使用 Web 安裝專案範本。 若要從 CD 或網路進行安裝,請使用安裝專案範本。 如需部署專案範本的詳細資訊,請參閱設定和部署專案。
檔案和資料夾
您可以使用 [檔案系統編輯器] 控制部署檔的安裝位置和方法。 各個電腦的檔案系統組織可能有所差異,而資料夾名稱亦各有不同。[檔案系統編輯器] 會使用抽象資料夾的概念,以確保檔案可依照您的要求安裝在正確的位置。 如需詳細資訊,請參閱部署中的檔案安裝管理。
虛擬資料夾代表 Windows 系統資料夾。 例如,[桌面資料夾] 就等於 [桌面] 系統資料夾。 Windows 可追蹤系統資料夾的位置,因此不論資料夾位於何處或命名為何,放在 [桌面資料夾] 中的檔案最後一律會在 [桌面] 系統資料夾中。 如需詳細資訊,請參閱特殊資料夾和自訂資料夾。
您亦可建立個人資料夾,並且置於任何系統資料夾下方的位置。 例如,您可於 [應用程式資料夾] 下方,建立 [應用程式資料] 資料夾。不論 [應用程式資料夾] 位於目標電腦上何處,[應用程式資料] 資料夾中的檔案,永遠都會安裝在相同的關聯位置。 如需詳細資訊,請參閱 HOW TO:在檔案系統編輯器中新增及移除資料夾。
[檔案系統編輯器] 中的資料夾可包含檔案、專案輸出和組件。 專案輸出代表方案內其他專案所包含的項目,同時可以包含主要組建輸出 (例如可執行檔)、當地語系化資源、符號偵錯資訊 (Symbolic Debug Info)、內容檔 (例如 HTML 網頁) 以及專案來源檔案。 在這些輸出中,每一項皆可參考為專案輸出群組;專案輸出群組中包含主要輸出 (Primary Output) (亦可稱為 Key Output),再加上其他額外的輸出和相依性。 如需詳細資訊,請參閱 HOW TO:在檔案系統編輯器中新增及移除專案輸出和 HOW TO:新增項目至部署專案。
此外,條件可置於任何使用 Condition 屬性的檔案或資料夾上。 這樣可讓您依據安裝時目標電腦上已存在的條件,自訂檔案安裝。 例如,您可選擇以目標電腦上的作業系統版本為基礎,來選擇安裝不同的檔案。 如需詳細資訊,請參閱Condition 屬性。
[檔案系統編輯器] 亦可支援建立捷徑,允許您在單一資料夾中放置檔案,並從另一資料夾或者桌面上的捷徑指向這些檔案。 如需詳細資訊,請參閱 HOW TO:在檔案系統編輯器中新增及移除捷徑。
檔案關聯
當您部署應用程式時,通常會想要產生檔案類型與該應用程式的關聯。 例如,如果您的應用程式可透過 .myfile 副檔名建立和使用檔案,則會想要產生應用程式與 .myfile 檔案類型的關聯,以在使用者按兩下 .myfile 檔案時自行於該應用程式中開啟。
Visual Studio 中的部署工具包含 [檔案類型編輯器],能讓您指定文件類型,並與副檔名產生關聯。 此外,您可為各文件類型指定動詞或動作,並指定文件類型的 MIME 類型,以便於瀏覽器中使用。 如需詳細資訊,請參閱部署中的檔案類型管理。
在安裝期間,會更新目標電腦上您在 [檔案類型編輯器] 中所指定的設定。
登錄
通常部署應用程式的整數部分包含存取登錄、設定登錄值,或建立登錄機碼。 Visual Studio 中的部署工具提供此功能。
Visual Studio 中的 [登錄編輯程式] 與 Windows [登錄編輯程式] 類似:這兩種工具都提供目標電腦上的登錄階層表示。 也會呈現標準登錄根目錄。 您可以變更現有機碼的值、加入新機碼的值,以及指定預設機碼。 如需詳細資訊,請參閱部署中的登錄設定管理。
在安裝期間,[登錄編輯程式] 中所指定的機碼和值都會寫入至目標電腦的登錄中。
此外,您可以使用 Condition 屬性,將條件放在任何登錄機碼或值上。 這樣可讓您依據安裝時目標電腦上已存在的條件自訂登錄。 例如,您可依目標電腦上的作業系統版本,來選擇輸入不同的登錄值。
Authenticode 簽署
您可能會想要簽署應用程式或元件,讓使用者可以驗證發行者並驗證它是否安全。 建議您簽署透過 Web 瀏覽器下載的封包檔和安裝程式。
您可以使用 Visual Studio 部署工具,透過 Microsoft Authenticode 技術簽署安裝程式、合併模組或封包檔。 您必須先取得數位憑證,才能簽署應用程式或元件。
若要使用 Authenticode 簽章,您必須在部署專案中啟用已簽署的 ClickOnce 資訊清單。 如需詳細資訊,請參閱專案設計工具、簽署頁。
全域組件快取
全域組件快取是 .NET Framework 提供的程式碼快取,用於儲存多種應用程式共用的組件。 若要安裝於全域組件快取,組件必須以強式名稱的方式命名,以提供應用程式或元件的唯一識別,而其他軟體可以用它明確識別和參考應用程式或元件。 如需詳細資訊,請參閱 HOW TO:簽署組件 (Visual Studio)。
若要在全域組件快取上安裝組件,請將組件或組件的專案輸出群組,加入到 [檔案系統編輯器] 的 [全域組件快取] 資料夾中。 若要開啟此編輯器,請指向 [檢視] 功能表上的 [編輯器],然後按一下 [檔案系統編輯器]。
[全域組件快取] 資料夾不同於 [檔案系統編輯器] 中的其他資料夾。 它沒有可以設定的屬性,您也無法建立資料夾捷徑或資料夾中組件的捷徑。
選取必要條件
若要成功部署應用程式,您也必須部署應用程式所參考的所有元件。 例如,多數應用程式都是以與 .NET Framework 具有相依性的 Visual Studio 所建立。 在安裝應用程式之前,目標電腦上必須有 Common Language Runtime 的必要版本。 Visual Studio 中的部署工具讓您能將 .NET Framework 和其他元件做為安裝的一部分共同安裝。 安裝必要條件元件的流程又稱為「啟動載入」(Bootstrapping)。
如需詳細資訊,請參閱 HOW TO:Windows Installer 部署的安裝必要條件。
使用管理權限進行安裝
Microsoft Windows Installer 的系統管理安裝功能,可以在網路共用上安裝應用程式的來源影像。 可以存取網路共用的工作群組使用者,可自來源影像安裝應用程式。
[使用者介面編輯器] 可讓您指定另一組安裝對話方塊,但需等到系統管理員在網路共用上經由命令列使用 /a 命令列選項 (msiexec /a<安裝程式名稱>) 安裝應用程式時才會顯示。 如需詳細資訊,請參閱部署中的使用者介面管理。
注意事項 |
---|
如果經由管理安裝來安裝應用程式,即使 [Bootstrapper] 屬性設定為 [Windows Installer 啟動載入器],也無法將啟動載入應用程式檔案 (Windows Installer 的安裝檔案,若有必要) 複製到伺服器。 安裝時如果需要啟動載入應用程式檔案,您必須將 Instmsia.msi、Instmsiw.msi、Setup.exe 和 Setup.ini 等檔案手動複製到伺服器。 這些檔案可在應用程式的 .msi 檔案所在的目錄中找到。 |
如需詳細資訊,請參閱管理安裝 (Windows Installer) 上的 Windows Installer SDK 文件。
視窗和提高
Windows Installer 技術支援在 Windows Vista 和 Windows 7 作業系統上的軟體安裝。 安裝應用程式的使用者,應該只有在每當遇到需要提高權限來安裝元件時才會收到提示,即使使用者的電腦是在使用者帳戶控制 (UAC) 下執行也是如此。
應用程式提高權限
通常,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 7 上的系統管理員協助提高權限。 在此案例中,使用者會收到要求系統管理員認證的提示,系統管理員則會為使用者輸入密碼。 為了支援這種案例,當您的電腦在 Windows Vista 或更新版的 Windows 上執行時,啟動載入器便會將 [AdminUser] 屬性設定為 [True]。
注意事項 |
---|
如果在不使用 UAC 的電腦上執行 Windows Vista,而您不是系統管理員,則 [AdminUser] 仍是設定為 [True]。 因此,.exe 安裝程式 (例如 SQLExpress32.exe) 應該被撰寫為偵測適當的權限,並在權限不足的情況下,產生特定的結束代碼 (Exit Code)。 您應該撰寫 Setup.exe 以攔截此結束代碼,並顯示訊息表示需要系統管理員。 |
必要條件提高權限
Windows Vista 和 Windows 7 會在需要時為必要條件的安裝提高權限。 啟動載入器本身並不會執行提高權限。Windows Vista 或 Windows 7 在 UAC 下執行時,除非必要條件元件已安裝,否則會針對每個必須提高權限的必要條件元件發出提示。 如果套件提高權限失敗,啟動載入器便會失敗並傳送適當的錯誤訊息。
自訂動作提高權限
您在 [自訂動作編輯器] 中建立的自訂動作,都會以提高權限的方式執行。 自訂動作不應該存取使用者的特定資料,例如登錄或檔案系統,因為自訂動作不會在叫用的使用者帳戶中執行。
根據預設,由於 [自訂動作編輯器] 中的 [NoImpersonate] 屬性預設值是 [True],自訂動作都會以提高權限的方式執行。 將 [NoImpersonate] 變更為 [False] 便會強制自訂動作模擬叫用的使用者,該使用者則可能僅有降低的權限。
Visual Studio 版本之間的差別
另請注意,Visual Studio 2005 和 Visual Studio 2008 安裝專案在 UAC 之下執行的方式會有所不同。
Windows Vista 或 Windows 7 內建的安裝程式偵測機制會在您於 UAC 下執行時,提示要求同意。 以 Visual Studio 2005 建置的啟動載入器 (Setup.exe) 則是無論安裝何種項目,永遠都會提示要求同意。 由於 Setup.exe 及其所有處理序都是以系統管理員語彙基元在 Windows Vista 和 Windows 7 上執行,因此最終的應用程式安裝會以提高權限的方式進行。 如果使用者是以系統管理員協助的提高權限執行 Setup.exe,應用程式便會在提高權限之使用者的設定檔 (而非系統管理員的設定檔) 下安裝。
在 Visual Studio 2008 和 Visual Studio 2010 中,Setup.exe 不會在啟動時提示要求提高權限。 為了避免提高權限的提示,啟動載入器的內嵌資訊清單會指定 Setup.exe 以 asInvoker 所要求的執行層級來執行。 這樣便能提供最終應用程式安裝不會以提高權限執行的效益,不過依然讓必要條件元件的安裝能夠視需要提高權限。 啟動載入器會呼叫 ShellExecute 啟動必要條件。 Windows Vista 或 Windows 7 會接收這個呼叫、執行安裝偵測,並在安裝之前發出使用者提示。
這項變更的缺點在於,除了應用程式本身以外,還會針對每個必須安裝的必要條件元件都發出提示。 不過,如果所有的必要條件元件都已經在電腦上,安裝就可能不會產生任何提示。 而且,您也不應該擁有需要提高權限的外部檢查。 除了安裝程式的提示以外,外部檢查運作時,每個外部檢查都會讓使用者收到數個提高權限提示。