September 6, 2005

DirectX, Installers and D3DX

As you may know, I recently upgraded to a new computer. Before getting this computer, I was participating in an NDA beta-test on a different product. (I'd tell you which, but the NDA doesn't expire for a year, so I'm just going to call it "Game X.")

Anyway, the first thing I did on my new machine was install Visual Studio .NET 2003 and the latest DirectX SDK. I received my gold master copy of "Game X" after I got my new machine, and this weekend decided to install it so I could properly stress-test my new machine, as this game really taxed my old box.

The install goes through without any problem, and I tell it to launch the game. I get a "Missing DLL" error, telling me that d3dx_24.dll was not found.

At this point, it hits me like a ton of bricks. A few versions of the SDK ago, the D3DX DLL's were broken out from the main redists so that breaking changes could be made. Unfortunately, that means that any game that uses D3DX needs to either have their installer force the proper version of the DirectX installer to run, or needs to include the D3DX_??.DLL as part of their installed files to their application directory.

So, if you get a game, install it and get a "D3DX_??.DLL" missing error, all you have to do to fix it is to run the DirectX installer on the installation media.

It doesn't surprise me that this wasn't caught either. When we build and test installers, we test on clean machines to make sure that a machine that doesn't have anything is brought up to the point where it can run the game. We don't usually think to test against newer versions of redists...usually because they don't exist when we are doing our testing.

Anyway, my apologies to the "Game X" development team. I E-mailed the beta lead what I found...I hope you haven't pressed too many CD's...

2 comments:

Anonymous said...

"all you have to do to fix it is to run the DirectX installer on the installation media."

You mean run the RIGHT DirectX installer. THe end user has to work out which D3DX DLL goes with which version of DirectX and then find the old redist (the current one is the one on the home page) and then install that one.

Michael Russell said...

If the team has done any testing whatsoever, the proper version of DirectX with the proper version of D3DX will be located on the installation media.

In this case, the proper DirectX version was on the install media for "Game X."

If the wrong DirectX version is on the media, well, there's no hope for that project anyway.