http://bugs.winehq.org/show_bug.cgi?id=30912
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED CC| |focht@gmx.net Resolution| |INVALID Summary|[Prince Of Persia : The |Prince Of Persia: The |Forgotten Sand]Does not |Forgotten Sand fails to run |work in 64Bits Prefix |in 64-bit WINEPREFIX | |(Microsoft XAudio2, part of | |DirectX must be installed | |with WinVer >= 2003 in | |64-bit prefixes)
--- Comment #3 from Anastasius Focht focht@gmx.net 2013-04-21 13:39:35 CDT --- Hello folks,
there is nothing wrong, it's by design (Microsoft) ;-)
The DirectX installer takes care for installing and registering 32-bit and 64-bit components in a shared WoW64 environment.
The 32-bit COM inproc servers are registered through the main installer (DllRegisterServer on each dll). Because the main installer is a 32-bit process all CLSID registry entries will be in correct 32-bit part of registry. All 64-bit COM inproc servers are registered through a 64-bit helper process (infinst.exe). This creates the data in the part of registry where they are seen by 64-bit processes (and not 32-bit - which wouldn't make sense anyway).
Microsoft imposed a restriction for XAudio2 on certain 64-bit Windows XP editions ("Windows XP Professional x64 Edition" vs. "Windows XP 64-Bit Edition", Version 2003). This means with Wine defaulting to plain "Windows XP" 64-bit all 32-bit XAudio2 inproc servers are installed/copied to %SystemRoot%\SysWOW64 (fs redirection) but are _not_ registered as inproc servers. The 64-bit counterparts are installed _and_ registered.
You can verify by examining "DirectX.log" which lives in "c:\windows\logs".
DX install log for 32-bit component "Aug2009_XAudio_x86.cab" in 64-bit WINEPREFIX:
--- snip --- ... 04/21/13 18:21:24: dxupdate: DirectXUpdateInstallPlugIn(): Installing Aug2009_XAudio_x86.cab... 04/21/13 18:21:24: dxupdate: DXCheckTrust(): Z:\home\focht\DOWN~NTG\dx\Aug2009_XAudio_x86.cab is trusted. 04/21/13 18:21:24: dxupdate: Extracted file C:\users\focht\Temp\DX28e1.tmp\AUG2009_XAudio_x86.inf from cab 04/21/13 18:21:24: dxupdate: DirectXUpdateGetSetupInformation(): DirectX Version: 4.09.00.0904.0 04/21/13 18:21:24: dxupdate: CheckDependency(): no dependency. 04/21/13 18:21:24: dxupdate: DirectXUpdateGetSetupInformation(): Section [4.09.00.0904.0-4.09.00.0904.0_WinXP@64] is being installed. 04/21/13 18:21:24: dxupdate: Extracted file C:\users\focht\Temp\DX28e1.tmp\XAudio2_5.dll from cab 04/21/13 18:21:24: dxupdate: Extracted file C:\users\focht\Temp\DX28e1.tmp\XAPOFX1_3.dll from cab 04/21/13 18:21:24: dxupdate: Extracted file C:\users\focht\Temp\DX28e1.tmp\XAudio2_5_x86.inf from cab 04/21/13 18:21:24: dxupdate: Extracted file C:\users\focht\Temp\DX28e1.tmp\XAudio2_5_x86.cat from cab 04/21/13 18:21:24: dxupdate: Extracted file C:\users\focht\Temp\DX28e1.tmp\XAudio2_5_x86_xp.inf from cab 04/21/13 18:21:24: dxupdate: Files: 5 04/21/13 18:21:24: dxupdate: Size: 21504 04/21/13 18:21:24: dxupdate: DirectXUpdateInstallPlugIn(): Installing: XAudio2_5_x86_xp.inf - [x64_Install] 04/21/13 18:21:24: dxupdate: Installed file C:\windows\SysWOW64\XAudio2_5.dll 04/21/13 18:21:24: dxupdate: Installed file C:\windows\SysWOW64\XAPOFX1_3.dll --- snip ---
DX install log for 32-bit component "Aug2009_XAudio_x86.cab" in 32-bit WINEPREFIX:
--- snip --- 04/21/13 18:24:30: dxupdate: DirectXUpdateInstallPlugIn(): Installing Aug2009_XAudio_x86.cab... 04/21/13 18:24:30: dxupdate: DXCheckTrust(): Z:\home\focht\DOWN~NTG\dx\Aug2009_XAudio_x86.cab is trusted. 04/21/13 18:24:30: dxupdate: Extracted file C:\windows\system32\DirectX\DXfdef.tmp\AUG2009_XAudio_x86.inf from cab 04/21/13 18:24:30: dxupdate: DirectXUpdateGetSetupInformation(): DirectX Version: 4.09.00.0904.0 04/21/13 18:24:30: dxupdate: CheckDependency(): no dependency. 04/21/13 18:24:30: dxupdate: DirectXUpdateGetSetupInformation(): Section [4.09.00.0904.0-4.09.00.0904.0_WinXP] is being installed. 04/21/13 18:24:30: dxupdate: Extracted file C:\windows\system32\DirectX\DXfdef.tmp\XAudio2_5.dll from cab 04/21/13 18:24:30: dxupdate: Extracted file C:\windows\system32\DirectX\DXfdef.tmp\XAPOFX1_3.dll from cab 04/21/13 18:24:30: dxupdate: Extracted file C:\windows\system32\DirectX\DXfdef.tmp\XAudio2_5_x86.inf from cab 04/21/13 18:24:30: dxupdate: Extracted file C:\windows\system32\DirectX\DXfdef.tmp\XAudio2_5_x86.cat from cab 04/21/13 18:24:30: dxupdate: Extracted file C:\windows\system32\DirectX\DXfdef.tmp\XAudio2_5_x86_xp.inf from cab 04/21/13 18:24:30: dxupdate: Files: 5 04/21/13 18:24:30: dxupdate: Size: 21504 04/21/13 18:24:30: dxupdate: DirectXUpdateInstallPlugIn(): Installing: XAudio2_5_x86_xp.inf - [x86_Install] 04/21/13 18:24:30: dxupdate: Installed file C:\windows\system32\XAudio2_5.dll 04/21/13 18:24:30: dxupdate: Installed file C:\windows\system32\XAPOFX1_3.dll 04/21/13 18:24:30: dxupdate: DirectXUpdateInstallPlugIn(): Registering: XAudio2_5_x86.inf - [DllRegisterServer] 04/21/13 18:24:30: dxupdate: RegisterDLL(): C:\windows\system32\XAudio2_5.dll is registered successfully. --- snip ---
Note the additional "DllRegisterServer" part.
64-bit components are omitted, they work as expected.
"XAudio2_5_x86_xp.inf":
--- snip --- [Version] Signature = "$Windows NT$" AdvancedINF = 2.0
[SourceDisksNames] 99 = %DiskName%,"AUG2009_XAudio2_5_x86.cab",0,,-1
[SourceDisksFiles] XAudio2_5.dll = 99 XAPOFX1_3.dll = 99
[DestinationDirs] DefaultDestDir = 11 DirectX_SysWOW64 = 10,SysWOW64
[x86_Install] CopyFiles = DirectX_System
[x64_Install] CopyFiles = DirectX_SysWOW64
[DirectX_System] XAudio2_5.dll XAPOFX1_3.dll
[DirectX_SysWOW64] XAudio2_5.dll XAPOFX1_3.dll
[DllRegisterServer] %11%\XAudio2_5.dll
[Strings] MSFT = "Microsoft" ExceptionClassDesc = "DirectX AUG2009 XAudio" DiskName = "DirectX AUG2009 XAudio cab" --- snip ---
Looks sane, "DllRegisterServer" section is present.
The solution lies in the parent "AUG2009_XAudio_x86.inf", responsible which child component .inf file sections are applied/executed.
--- snip --- ... ; ---- Windows XP ---- [4.09.00.0904.00-4.09.00.0904.00_WinXP] NumberOfFiles=5 Size=21 ;approximately total file size (Size * 1024 bytes) CopyCount=1 XAudio2_5_x86_xp.inf, x86_Install XAudio2_5_x86.inf, DllRegisterServer
; ---- Windows XP 64bit ---- [4.09.00.0904.00-4.09.00.0904.00_WinXP@64] NumberOfFiles=5 Size=21 ;approximately total file size (Size * 1024 bytes) CopyCount=1 XAudio2_5_x86_xp.inf, x64_Install ...
; ---- Windows Server 2003 ---- [4.09.00.0904.00-4.09.00.0904.00_Srv2K3] NumberOfFiles=5 Size=21 ;approximately total file size (Size * 1024 bytes) CopyCount=1 XAudio2_5_x86_xp.inf, x86_install XAudio2_5_x86.inf, DllRegisterServer
; ---- Windows Server 2003 64bit ---- [4.09.00.0904.00-4.09.00.0904.00_Srv2K3@64] NumberOfFiles=5 Size=21 ;approximately total file size (Size * 1024 bytes) CopyCount=1 XAudio2_5_x86_xp.inf, x64_install XAudio2_5_x86.inf, DllRegisterServer ... --- snip ---
Windows XP 64bit dubbed "WinXP@64" section has the "DllRegisterServer" section reference for "XAudio2_5_x86.inf" omitted. This results in 32-bit components "DllRegisterServer" sections not being executed in shared WoW64 environment.
Solution: set WinVer at least to "Windows 2003" before you are going to install DirectX/XAudio2 in a 64-bit WINEPREFIX. This will correctly install and register both, 32-bit and 64-bit XAudio2 dlls.
Resolving "invalid".
Regards