適用于遊戲開發人員的 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 Update 之後尚未變更,而且它們符合使用 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、一般PUT、Managed DirectX 和其他這類元件。 許多選擇性元件都會定期更新,以整合客戶意見反應並公開新功能。
DirectX 版本號碼
DirectX 版本號碼,例如 9.0c,只會參考核心元件的版本,例如 Direct3D、DirectInput 或 DirectSound。 此數位未涵蓋 DirectX SDK 中發行的各種選擇性元件版本,例如 D3DX、XACT、一般輸出等等。
一般而言,除了核心執行時間位的快速參考之外,DirectX 版本號碼並不有意義。 此數位不應該用來檢查是否已安裝正確的 DirectX 執行時間,因為它不會考慮選用的 DirectX 元件。
DirectX 程式庫
在過去,DirectX SDK 的選擇性元件,包括 D3DX,已發行為靜態程式庫。 不過,這些現在會發行為類似動態的程式庫, (DLL) ,因為提升安全性做法的需求。 DLL 允許維護先前發行的程式碼。 如果這些元件部署為靜態程式庫,Microsoft 就無法解決發行後發現的安全性問題。
當功能新增或變更為選擇性元件時,對應的 DLL 名稱也會變更,以確保不會對使用已發行元件的現有遊戲造成任何回歸。 每個元件的 DLL 會並存,而遊戲開發人員可以連結至對應的匯入程式庫,來選擇遊戲所使用的 DLL 版本。
雖然確保 DLL 安裝在系統上並不簡單,只是連結至靜態程式庫,但已對 DirectX SDK 進行一些變更,以解決 DLL 模型的困難:
- DirectX 可轉散發套件可以設定為只包含應用程式所需的元件,以將散發和媒體大小降到最低。
- Program Files\DirectX SDK\Redist\的可轉散發資料夾現在包含每個可能選用元件的封包 (.cab) 檔案,因此您不需要深入瞭解較舊的 SDK 來尋找它們。
- 安裝 SDK 本身會安裝每個可能的選擇性元件。
- 包含所有選擇性元件的 DirectX 可轉散發套件可同時以 Web 為基礎的安裝程式和可下載的套件提供;如需詳細資訊,請參閱 DirectX 開發人員中心 (DirectX) 。
由遊戲安裝程式安裝 DirectX
注意
以下是將 DirectX 安裝新增至遊戲安裝程式的最佳做法:
詞彙 | 描述 |
---|---|
每次安裝可轉散發元件。 |
遊戲的安裝程式應該在每次安裝期間安裝 DirectX 可轉散發元件,而不允許使用者退出。 如果您允許退出,則有些使用者會猜測他們不需要它,如果他們實際這麼做,遊戲就不會執行。 |
讓 DirectX 安裝程式檢查選用元件。 |
請勿假設系統上已安裝最新的選用元件,因為 Windows Update 和 Service Pack 不會提供任何 DirectX 的選用元件。 您必須直接執行 dxsetup.exe 或呼叫 DirectSetup 來安裝 DirectX 執行時間。 |
以無訊息方式設定。 |
以無訊息模式啟動安裝程式,讓使用者不會不小心略過更新 DirectX 執行時間。 您可以使用下列命令啟動dxsetup.exe來執行此動作: 或藉由呼叫 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,或假設已安裝 DirectShow,則可以省略BDA.cab、BDANT.cab和BDAXP.cab。
注意
如果應用程式的舊版已安裝 DirectX 9.0c,您可以假設應用程式的使用者已經擁有 DirectX 9.0c,您可以強制使用者透過 Web 安裝程式手動更新,或假設他們有 Windows XP SP2 或更新版本。
繼續進行此範例,如果您只針對 2006 年 4 月使用 D3DX 的 32 位版本,您可以新增Apr2006_d3dx9_30_x86.cab。 如果您使用 32 位 2006 年 8 月 32 位版本的一個版的一個,您會新增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,因為很容易忘記移除最終產品的 DLL。 相反地,將 DirectX 安裝程式檔案放在共用資料夾中,然後從共用資料夾以無訊息方式執行安裝程式。
傳統型橋接器應用程式
傳統型橋接器使用 D3DX9、D3DX10、D3DX11、XAudio 2.7、XInput 1.3 或 XACT 的應用程式必須下載Microsoft.DirectX.x86或Microsoft.DirectX.x64架構,才能部署這些舊版 DirectX SDK 並存元件。 或者,您可以移除所有這類相依性— (請參閱XAudio 2.9 可轉散發版本的開發人員指南,以及部落格文章Living without D3DX和一般WINDOWS 8) 。