http://bugs.winehq.org/show_bug.cgi?id=30912 Anastasius Focht <focht(a)gmx.net> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED CC| |focht(a)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(a)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(a)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(a)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(a)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(a)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 -- Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email Do not reply to this email, post in Bugzilla using the above URL to reply. ------- You are receiving this mail because: ------- You are watching all bug changes.