共用方式為


選擇部署方法

更新:2007 年 11 月

大多數情況下,Visual C++ 應用程式的部署都是利用 Windows Installer 部署所完成。如需 Visual Studio 所支援之部署方法及替代方法的詳細資訊,請參閱 選擇部署策略其他部署。Visual Studio 2005 中不支援 Visual C++ 原生應用程式的 ClickOnce 部署;但是,可以在命令列透過 ClickOnce 來部署 Visual C++ 應用程式。如需詳細資訊,請參閱 Visual C++ 應用程式的 ClickOnce 部署

Visual C++ 程式庫為並存組件

Visual Studio 2005 會安裝 Visual C++ 程式庫做為共用的並存組件。根據預設,所有以 Visual Studio 2005 建置的應用程式都會建置為隔離的應用程式,並包含內嵌為資源或是將最終二進位檔當做外部檔案隨附的資訊清單。為了要確保 Visual C++ 應用程式可在未安裝 Visual C++ 的電腦中執行,您必須將 Visual C++ 組件與應用程式一起轉散發,並確定目標電腦中已經安裝這些組件。

轉散發 Visual C++ 程式庫

有三種方法可以轉散發 Visual C++ DLL:

  1. 使用 Visual C++ 可轉散發合併模組,將特定 Visual C++ 程式庫當成共用並存組件安裝到原生組譯碼快取 (WinSxS 資料夾) 中。這是轉散發 Visual C++ 程式庫時主要的建議方式。若要存取這個資料夾,必須由具備系統管理權限的使用者來執行安裝應用程式。如需詳細資訊,請參閱使用合併模組轉散發。您可以在 HOW TO:部署安裝和部署專案中找到這種部署的範例。

  2. 使用 Visual C++ 可轉散發套件 (VCRedist_x86.exe、VCRedist_x64.exe、VCRedist_ia64.exe),將所有 Visual C++ 程式庫當成共用並存組件安裝到原生組譯碼快取 (WinSxS 資料夾) 中。這個套件會由 Visual Studio 安裝到 %WindowsSdkDir%\Bootstrapper\Packages\ 資料夾中,您也可以從 Microsoft 下載網站 Microsoft Visual C++ 2005 可轉散發套件 (x86) 下載。對於使用 Visual C++ Express 建置的應用程式,以及希望一次部署所有 Visual C++ 程式庫的情況,建議使用這個套件來轉散發 Visual C++ 程式庫。如需如何使用這個套件的範例,請參閱 HOW TO:使用 XCopy 部署

  3. 將特定 Visual C++ 組件安裝為應用程式的私用組件,並使用 Program Files\Microsoft Visual Studio 8\VC\Redist 目錄中所提供的檔案。這是建議的方式,讓沒有管理權限的使用者或在可從共用執行應用程式時可以安裝應用程式。如需範例,請參閱 HOW TO:使用 XCopy 部署

注意事項:

在 Windows Server 2000 中,使用「轉散發合併模組」是轉散發 Visual C++ 程式庫的唯一建議且支援的方式。

當使用可轉散發合併模組來安裝 Visual C++ 程式庫時,會將這些組件當成共用並存組件部署在原生組譯碼快取 (WinSxS 資料夾) 中。若要存取這個資料夾,必須由具備系統管理權限的使用者來執行安裝應用程式。

如果安裝是由不具備系統管理權限的使用者所執行,則安裝作業將無法部署 Visual C++ 組件,而應用程式也不會執行。此外,某些產品可能允許根據每一使用者進行安裝,但是合併模組會將程式庫安裝到共用位置,且會影響到系統的所有使用者。在這些情況及類似的情況下,支援的方法是將必要的組件安裝為特定使用者之應用程式的私用並存組件。

使用這個方法之後,便能夠針對相依組件將具有 DLL 和資訊清單的資料夾複製到應用程式的本機資料夾中。當執行應用程式時,作業系統的載入器仍然會先尋找 WinSxS 資料夾中的相依組件;但是,當找不到對應的組件時,載入器會從這個子目錄載入私用組件。

不正確的轉散發 Visual C++ 程式庫可能會在執行相依的應用程式時發生執行階段錯誤。疑難排解 C/C++ 隔離應用程式和並存組件 中列有可能的錯誤及其解決方案的清單。

必要的資訊清單

不支援轉散發未使用資訊清單所建置的 C/C++ 應用程式。一定要有將應用程式繫結至 Visual C++ 程式庫的資訊清單,C/C++ 應用程式才可以使用這些程式庫。所有以 Visual C++ 2005 建置的 C/C++ 二進位檔都必須包含資訊清單,以描述其對於 Visual C++ 程式庫的相依性。這是 Visual Studio 中專案的預設安裝,以及從物件碼建置最終二進位檔的連結器之預設行為。

建議您不管發生任何狀況,資訊清單都應僅供內部使用。但如果是 EXE 檔,則資訊清單可以是外部的 (雖支援這種案例,但並不建議您使用)。

應用程式若預期相依 DLL 應該存在應用程式的本機資料夾或環境變數所指示的資料夾中,可能也很容易遭受到安全性相關濫用者的攻擊。當這類應用程式已經部署之後,為其提供服務也會更困難。

動態連結優先於靜態連結

不建議轉散發靜態連結至 Visual C++ 程式庫的 C/C++ 應用程式,經常會被人誤以為將程式靜態連結至 Visual C++ 程式庫之後,可能會讓應用程式的效能大為提升。但是,在幾乎所有情況下,動態載入 Visual C++ 程式庫對效能產生的影響,是微不足道的。此外,靜態連結不允許由應用程式的作者或 Microsoft 來服務應用程式和其相依程式庫。例如靜態連結至特定程式庫的應用程式,而此應用程式可以在具有此新版程式庫的用戶端電腦上執行。此應用程式仍然會使用舊版程式庫中的程式碼,而且不會因程式庫的提升 (例如安全性增強) 而受益。C/C++ 應用程式的作者強烈建議,在決定要以靜態方式連結至相依程式庫之前,一定要仔細考量此服務情況,並盡可能使用動態連結。

請參閱

概念

選擇部署策略

部署範例

其他資源

部署 (C++)

Windows Installer 部署概觀

ClickOnce 部署