Well I tried the KernelEx suggestion, but I'm afraid that installing it made no difference.
I'm sure it's a good thing to have it installed anyway, so thanks RetroOS!
I then looked at Problemchyld's suggestion of substituting files from the older version.
There doesn't seem to be a file called "directx.cab".
There isn't one called "bda.cab" either. There are files called "bdant.cab" and "bdaxp.cab" though.
Are you seeing different files from me Problemchyld?
Well, to cut a long story short, from my experiments with substituting files, the files causing the problem turned out to be "dxupdate.cab" and "dxdllreg_x86.cab".
If the 2008 version of
either of those files is present the installer fails.
If I have all of the 2008 files in the folder except those two, which I substitute with the 2007 versions, it works!
dxdllreg_x86.cab contains two files, "dxdllreg_x86.inf" and "dxdllreg.exe".
The inf files are identical in both versions as far as I can see.
The dxdllreg.exe files claim to be the same version (4.9.0.0904) but are of different file sizes.
The 2007 one (65KB) has a digital signature, the 2008 one (79KB) doesn't, rather surprisingly.
dxupdate.cab contains three files, "dxupdate.inf", "dxupdate.dll", and "dxupdate.cif".
The dxupdate dlls again both claim to be version 4.9.0.0904 but are of different file sizes.
The dxupdate.inf files are different. The 2008 version has entries added under the [DirectX_Update_PlugIn] section for Nov 2007, March 2008, and Jun 2008 cab files. Not unexpected of course.
The 2008 "cif" file likewise has entries added for these new cabs.
It's probably the calling of one or more of these new files that's causing the problem of course, which is why the 2007 version of "dxupdate.cab" works, because it ignore them!
Still puzzled about "dxdllreg_x86.cab" though.........
I did get some entries this time in my error log files when the install failed.
DxError.log records -
--------------------
[08/08/08 22:31:06] module: dxupdate(Jul 20 2007), file: dxupdate.cpp, line: 1091, function: CabCallback
SPFILENOTIFY_FILEEXTRACTED: error = 13.
--------------------
[08/08/08 22:31:06] module: dxupdate(Jul 20 2007), file: dxupdate.cpp, line: 5665, function: DirectXUpdateInstallPlugIn
Failed API: SetupIterateCabinet()
Error: (13) - The data is invalid.
Unable to iterate through C:\WIN-98\TEMP\dxdllreg_x86.cab. The file may be damaged.
--------------------
Anyone any ideas?