面向游戏开发人员的 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、托管 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\现在包含每个可能的可选组件的 cabinet (.cab) 文件,因此无需挖掘较旧的 SDK 即可找到它们。
  • 安装 SDK 本身会安装每个可能的可选组件。
  • 包含所有可选组件的 DirectX 可再发行组件作为基于 Web 的安装程序和可下载的包提供;有关详细信息,请参阅 DirectX 开发人员中心 (DirectX) 。

由游戏安装程序安装 DirectX

以下是将 DirectX 安装添加到游戏安装程序的最佳做法:

术语 说明
每次安装可再发行组件。
游戏的安装过程应在每次安装过程中安装 DirectX 可再发行组件,而不允许用户选择退出。 如果你允许选择退出,那么一些用户会猜测他们不需要它,如果他们确实这样做,游戏将不会运行。
让 DirectX 安装程序检查可选组件。
请勿假定系统上已安装最新的可选组件,因为Windows 更新和 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 cabinet 文件包含在安装介质的可再发行组件文件夹中。 大多数 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

将要安装的组件的 cabinet 文件添加到这些组件。 如果要求应用程序的用户已具有 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(如果该应用程序由早期版本的应用程序安装),强制用户通过 Web 安装程序手动更新,或者假设他们具有 Windows XP SP2 或更高版本。

继续此示例,如果仅在 2006 年 4 月使用 32 位版本的 D3DX,则可以添加Apr2006_d3dx9_30_x86.cab。 如果使用 32 位 2006 年 8 月 32 位版本的 XINPUT,请添加 Aug2006_xinput_x86.cab。

如果有本机 64 位应用程序,则需要添加_x64版本。 但是,如果有一个 32 位应用程序在 64 位操作系统上运行,则 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 并行组件。 或者,可以删除所有此类依赖项, (请参阅 XAudio 2.9 可再发行版本的开发人员指南,以及博客文章 Living without D3DX and XINPUT 和 Windows 8) 。