共用方式為


適用於遊戲開發人員的 DirectX 安裝

本文旨在解決 DirectX 運行時間的一些常見問題,以及使用 DirectSetup 來安裝 DirectX。

重要

舊版 DirectX SDK 在生命周期結束時,但仍可供使用,以支援舊的遊戲、教學課程和專案。 新項目不應該使用它。 使用舊版 DirectX SDK 需要針對 D3DX9、D3DX10、D3DX11、XAudio 2.7、XInput 1.3 和 XACT 等元件使用已被取代的 DirectSetup。 如需 DirectX SDK 目前狀態的詳細資訊,請參閱 DirectX SDK 在哪裡?,以及部落格文章 非直接安裝

DirectX 運行時間

DirectX 運行時間是由核心元件和選擇性元件所組成。

Direct3D 和 DirectInput 等核心元件會被視為作系統的一部分。 DirectX 9.0c 的核心元件自 DirectX SDK 2004 年夏季更新以來尚未變更,而且它們與 Microsoft Windows XP SP2、Windows XP Pro x64 Edition 和 Windows Server 2003 SP1 一起發行的內容相符。 Windows Vista 包含 DirectX 10,可支援 Windows 顯示驅動程式模型 (WDDM) 和 Direct3D 10.x。 Windows 7 和 Windows Vista 支援 DirectX 11,其支援 Direct3D 11、Direct2D、DirectWrite、WARP10 軟體轉譯裝置,以及 10level9 功能層級。 如需詳細資訊,請參閱 Windows 中的 圖形 API。

選擇性元件會在 DirectX SDK 的更新中發行,其中包括 D3DX、XACT、XAudio2、XINPUT、Managed DirectX 和其他這類元件。 許多選用元件會定期更新,以整合客戶意見反應並公開新功能。

DirectX 版本號碼

DirectX 版本號碼,例如 9.0c,只會參考核心元件的版本,例如 Direct3D、DirectInput 或 DirectSound。 此數位未涵蓋 DirectX SDK 中發行的各種選擇性元件版本,例如 D3DX、XACT、XINPUT 等等。

一般而言,DirectX 版本號碼並不有意義,只是作為核心運行時間位的快速參考。 這個數位不應該用來檢查是否已安裝正確的 DirectX 運行時間,因為它不會考慮選用的 DirectX 元件。

DirectX 連結庫

過去,DirectX SDK 的選擇性元件,包括 D3DX,已發行為靜態連結庫。 不過,由於對更佳安全性做法的需求增加,因此這些連結庫現在會發行為類似動態的連結庫(DLL)。 DLL 允許維護先前發行的程序代碼。 如果這些元件部署為靜態連結庫,則無法Microsoft解決發行后發現的安全性問題。

隨著功能新增或變更至選用元件,對應的 DLL 名稱也會變更,以確保不會因為使用已發行元件的現有遊戲而造成任何回歸。 每個元件的 DLL 並存,遊戲開發人員可以藉由連結至對應的匯入連結庫,來選擇遊戲所使用的 DLL 版本。

雖然確保 DLL 安裝在系統上並不像直接連結至靜態庫那麼簡單,但已對 DirectX SDK 進行一些變更,以解決 DLL 模型的痛苦:

  • DirectX 可轉散發套件可以設定為只包含應用程式需要將散發和媒體大小降至最低的元件。
  • 每個可能選用元件的可轉散發資料夾 Program Files\DirectX SDK\Redist\, now contains a cabinet (.cab) 檔案,因此您不需要挖出較舊的 SDK 來尋找它們。
  • 安裝 SDK 本身會安裝每個可能的選擇性元件。
  • 包含所有選用元件的 DirectX 可轉散發套件,可同時作為 Web 型安裝程式和可下載的套件使用;如需詳細資訊,請參閱 DirectX 開發人員中心 (DirectX)。

由遊戲安裝程式安裝 DirectX

以下是將 DirectX 安裝新增至遊戲安裝程式的最佳做法:

術語 描述
每次安裝可轉散發元件。
遊戲的安裝程式應該在每次安裝期間安裝 DirectX 可轉散發元件,而不允許使用者退出。 如果您允許退出,則有些用戶會猜測他們不需要,如果他們真的這麼做,遊戲就不會執行。
讓 DirectX 安裝程式檢查選用元件。
請勿假設系統上已安裝最新的選用元件,因為 Windows Update 和 Service Pack 不提供任何 DirectX 的選用元件。 您必須直接執行 dxsetup.exe 或呼叫 DirectSetup,以安裝 DirectX 運行時間。
以無訊息方式設定。
以無訊息模式啟動安裝程式,讓使用者不會不小心略過更新 DirectX 運行時間。 您可以使用下列命令啟動 dxsetup.exe 來執行此動作:
   path-to-redistributable\dxsetup.exe /silent
或藉由呼叫 DirectSetup 而未顯示任何 UI。
合併 EULA 接受。
如果您提示使用者接受 EULA,請在以無訊息模式安裝時,將它與提示接受 DirectX EULA 合併,以便提示接受 EULA 只會發生一次。 在安裝任何專案之前,應該先出現提示,如此一來,如果使用者不接受,則最後不會安裝失敗和部分安裝。
直接執行 dxsetup 或呼叫 DirectSetup。
由於 DirectX 版本號碼不會參考核心 DirectX 元件以外的任何專案,因此在執行 dxsetup.exe 或呼叫 DirectSetup 之前,請勿檢查已安裝的版本。 此外,請勿檢查檔案是否存在,以測試是否已安裝選用元件,因為這通常不會正確判斷元件是否存在,但需要更新。 不過,DirectX 安裝套件會快速判斷此情況,並執行正確的動作。

小型安裝套件

您可以將 DirectX 可轉散發資料夾的內容從精簡到讓安裝程式正常運作所需的最小檔案集,並保留您遊戲使用的任何其他元件,以建立較小的 DirectX 安裝套件。

根據您的最低規格,您甚至不需要在安裝媒體的可轉散發資料夾中包含核心 DirectX 9.0c 封包檔案。 大部分的 Windows XP 安裝都有 Service Pack 2,其中包含核心 DirectX 9.0c 元件,因此 DirectX 安裝作業會非常快速,而且不需要重新啟動。 可以建立的最小套件約為 3 MB,而且可以壓縮到大約一半的大小。 這類套件包含一個 D3DX DLL 版本,而且它要求 DirectX 9.0c 已經存在。

建置可轉散發套件所需的最小檔案集是下列檔案,位於 DirectX SDK Redist 資料夾 (Program Files\DirectX SDK\Redist):

  • dxsetup.exe
  • dsetup32.dll
  • dsetup.dll
  • dxupdate.cab

針對您要安裝的元件,新增至這些封包檔案。 如果您需要應用程式的使用者已經有 DirectX 9.0c,則不需要包含 DirectX.cab 或 dxnt.cab,這佔大部分的空間需求。 只有 Windows 98 和 Windows ME 才需要 DirectX.cab;只有 Windows 2000、Windows XP 和 Windows XP SP1 才需要 dxnt.cab;和 dxdllreg_x86.cab 僅適用於 Windows 2000、Windows XP RTM、Windows XP SP1 和 Windows Server 2003 RTM。 此外,如果您未使用 DirectShow,或假設它已安裝,則可以省略 BDA.cab、BDANT.cab和 BDAXP.cab。

注意

您可以假設應用程式的使用者如果舊版應用程式已安裝 DirectX 9.0c,您可以強制使用者透過 Web 安裝程式手動更新,或假設他們有 Windows XP SP2 或更新版本。

繼續進行此範例,如果您只針對 2006 年 4 月使用 32 位版本的 D3DX,您可以新增 Apr2006_d3dx9_30_x86.cab。 如果您使用 32 位 2006 年 8 月 32 位版本的 XINPUT,請新增 Aug2006_xinput_x86.cab。

如果您有原生 64 位應用程式,則必須新增_x64版本。 不過,如果您有在 64 位 OS 上執行的 32 位應用程式,32 位版本的 DLL 將會運作。

然後,您可以散發此套件,並以無訊息模式啟動 DirectSetup,或在命令殼層中以無訊息模式執行 dxsetup.exe。 請記得不要透過檔案的任何版本檢查來保護此套件,並確定您的使用者無法退出退出執行 DirectX 安裝程式。 這其中一個事件都會建立一個可發生問題的安裝程式。

偵錯 DirectX 執行時間的內部部署

安裝 DirectX SDK 時,會安裝 DirectX 元件的偵錯運行時間,但在每個測試電腦上安裝 SDK 可能會很痛苦。 您需要設計安裝程式,將偵錯運行時間 DLL 從 Program Files\Microsoft DirectX SDK\Developer Runtime\architecture\ 複製到 Windows\system32\ 或遊戲資料夾。

不過,強烈建議您不只複製發行的運行時間 DLL,因為很容易忘記移除最終產品。 相反地,將 DirectX 安裝程式檔案放在共享資料夾中,然後從共用資料夾以無訊息方式執行安裝程式。

傳統型網橋應用程式

使用 D3DX9 的傳統型網橋應用程式, D3DX10、D3DX11、XAudio 2.7、XInput 1.3 或 XACT 必須下載 Microsoft.DirectX.x86Microsoft.DirectX.x64 架構,才能部署這些舊版 DirectX SDK 並存元件。 或者,您可以移除所有這類相依性(請參閱 Developer guide for 可轉散發版本的 XAudio 2.9,以及部落格文章 Living without D3DXXINPUT 和 Windows 8)。