https://bugs.winehq.org/show_bug.cgi?id=36059
Bug ID: 36059 Summary: Multiple Steam games fail to install DirectX runtime prerequisite, resulting in repeated install attempt on startup ('xinput1_3.dll' locked by client) Product: Wine Version: 1.7.17 Hardware: x86 OS: Linux Status: NEW Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net
Hello folks,
splitting this issue off from various Steam related bug reports for reference.
Many Steam games require DirectX runtime, usually stated in game folder 'installscript.vdf'.
Example VDF:
--- snip --- "Run Process" { ... "directx" { "hasrunkey" "HKEY_LOCAL_MACHINE\Software\Valve\Steam\Apps\110800" "process 1" "%INSTALLDIR%\3rd\DXSETUP.exe" "command 1" "/silent" } ... } --- snip ---
For various games the DirectX runtime install fails, resulting in repeated install attempt on startup of the game.
To illustrate how common this problem is, just a small list of some games I installed for tests:
NOTE: non-zero 'Exit Code' indicates the installer failed
'installscript_log.txt' from 'c:\Program Files\Steam\logs' folder
--- snip --- ... 04/15/14 00:08:33 [AppID 50280] Exit Code (-9) : "C:\Program Files\Steam\steamapps\common\Mafia II - Public Demo\3rd\DirectX\DXSETUP.exe" /silent GLE 0 ... 04/17/14 10:58:48 [AppID 17470] Exit Code (-9) : "C:\Program Files\Steam\steamapps\common\Dead Space\installers\DirectX\DXSETUP.exe" /silent GLE 0 ... 04/17/14 19:55:11 [AppID 55230] Exit Code (-9) : "C:\Program Files\Steam\steamapps\common\Saints Row the Third\DirectX\DXSetup.exe" /silent GLE 0 04/17/14 21:36:35 [AppID 72850] Exit Code (-9) : "C:\Program Files\Steam\steamapps\common\Skyrim\DirectX10\DXSETUP.exe" /silent GLE 0 ... 04/22/14 17:28:29 [AppID 49520] Exit Code (-9) : "C:\Program Files\Steam\steamapps\common\Borderlands 2\Binaries\Redist\DXRedistCutdown\DXSETUP.exe" /silent GLE 0 ... 04/22/14 22:18:15 [AppID 34330] Exit Code (-9) : "C:\Program Files\Steam\steamapps\common\Total War SHOGUN 2\redist\DirectX\DXSETUP.exe" /silent GLE 0 --- snip ---
The DirectX runtime installer can't overwrite a dll that is locked by the Steam client/launcher in memory.
You can check 'c:\windows\logs\DirectX.log'.
--- snip --- ... 04/17/14 11:03:38: dxupdate: DirectXUpdateGetSetupInformation(): Section [4.09.00.0904.0-4.09.00.0904.0_WinXP] is being installed. 04/17/14 11:03:38: dxupdate: Extracted file C:\windows\system32\DirectX\DX7536.tmp\xinput1_3_x86.cat from cab 04/17/14 11:03:38: dxupdate: Extracted file C:\windows\system32\DirectX\DX7536.tmp\xinput1_3.dll from cab 04/17/14 11:03:38: dxupdate: Extracted file C:\windows\system32\DirectX\DX7536.tmp\xinput1_3_x86.inf from cab 04/17/14 11:03:38: dxupdate: Extracted file C:\windows\system32\DirectX\DX7536.tmp\xinput1_3_x86_xp.inf from cab 04/17/14 11:03:38: dxupdate: Files: 5 04/17/14 11:03:38: dxupdate: Size: 498688 04/17/14 11:03:38: dxupdate: DirectXUpdateInstallPlugIn(): Installing: xinput1_3_x86_xp.inf - [x86_Install] 04/17/14 11:03:38: dxupdate: Target file: 'C:\windows\system32\xinput1_3.dll' Target file is Version 9.18.944.0 Source file is Version 9.18.944.0 04/17/14 11:03:38: dxupdate: InUse: C:\windows\system32\xinput1_3.dll. 04/17/14 11:03:38: dxupdate: CabCallback(): Unable to copy C:\windows\system32\DirectX\DX7536.tmp\xinput1_3.dll. 04/17/14 11:03:38: dxupdate: ExecuteInf(): SetupInstallFromInfSection() failed, error = 183. 04/17/14 11:03:38: dxupdate: ExecuteInf(): Unable to install C:\windows\system32\DirectX\DX7536.tmp\xinput1_3_x86_xp.inf:[x86_Install]. The file may be damaged. 04/17/14 11:03:38: dxupdate: DirectXUpdateInstallPlugIn(): ExecuteInf() failed. 04/17/14 11:03:38: dsetup32: CSetup::InstallPlugIn(): DirectXUpdateInstallPlugIn() failed. 04/17/14 11:03:38: dsetup32: CSetup::SetupForDirectX(): InstallPlugIn() failed. 04/17/14 11:03:38: dsetup32: start finalizing: phase: 5 - 5, total: 0 - 2 04/17/14 11:03:38: dsetup32: Installation ended with value -9 = Internal or unsupported error --- snip ---
In many cases it's 'xinput1_3.dll'. This kind of error is also encountered on Windows (lots of reports). A reboot in between starts will fix it because the locked dll will be replaced on next Windows startup.
There are multiple ways to handle this problem (apart from adding support for SP_COPY_IN_USE_NEEDS_REBOOT to Wine itself):
1) install DX runtime without starting Steam in the Steam WINEPREFIX (make sure you don't auto-run Steam services)
-> app folder -> 'installers' -> 'DirectX'
--- snip --- $ wine DXSETUP.exe /silent --- snip ---
2) remove the dll from 'system32' folder (or 'SysWOW64' on 64-bit prefix) prior running Steam in the prefix
3) fake successful installation by adding registry key (see '17470_install.vdf' where the registry key is located -> 'DirectX' DWORD:1)
Regards