[Bug 30912] Prince Of Persia: The Forgotten Sand fails to run in 64-bit WINEPREFIX (Microsoft XAudio2, part of DirectX must be installed with WinVer >= 2003 in 64-bit prefixes)
wine-bugs at winehq.org
wine-bugs at winehq.org
Sun Apr 21 13:39:35 CDT 2013
http://bugs.winehq.org/show_bug.cgi?id=30912
Anastasius Focht <focht at gmx.net> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
CC| |focht at 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 at 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 at 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 at 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 at 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 at 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.
More information about the wine-bugs
mailing list