http://bugs.winehq.org/show_bug.cgi?id=21790
Summary: 3D Rad demo "BeltBall" can't use its bundled mfc80u.dll? Product: Wine Version: 1.1.38 Platform: x86 URL: http://www.3drad.com/games/BeltBall%20v102.exe OS/Version: Linux Status: UNCONFIRMED Keywords: download Severity: normal Priority: P2 Component: -unknown AssignedTo: wine-bugs@winehq.org ReportedBy: dank@kegel.com
The smallest demo from http://www.3drad.com/free-pc-games.php is the 8MB http://www.3drad.com/games/BeltBall%20v102.exe, sha1sum d8827274480b0391ad200478b2ebe26a2658166d BeltBall v102.exe
It installs fine, but when you start it, it complains fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC80.CRT" (8.0.50727.762) and puts up a dialog saying "The dynamic link library 'MFC80U.DLL' could not be found" even though it's installed in ./3D Rad Games/BeltBall v102/Microsoft.VC80.MFC/mfc80u.dll Perhaps the installer forgot to set an app path or a manifest or something?
winetricks vc2005 works around the problem.
The game installs and runs fine on Vista; I guess we need to try it on an old XP box that doesn't have vc2005 runtimes already and see if it works there to confirm this bug.
(I checked on Vista, and there's no entry for the app in HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths, for what it's worth. And there doesn't seem to be a manifest file next to the .exe.)
http://bugs.winehq.org/show_bug.cgi?id=21790
Dan Kegel dank@kegel.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Version|1.1.38 |1.1.39
--- Comment #1 from Dan Kegel dank@kegel.com 2010-02-20 19:11:08 --- (This was with today's git.)
http://bugs.winehq.org/show_bug.cgi?id=21790
Xavier Vachon xvachon@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |xvachon@gmail.com
--- Comment #2 from Xavier Vachon xvachon@gmail.com 2011-04-04 16:55:11 CDT --- Still a bug in git (1.3.17)
http://bugs.winehq.org/show_bug.cgi?id=21790
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW CC| |focht@gmx.net Component|-unknown |loader Summary|3D Rad demo "BeltBall" |3D Rad demo "BeltBall" |can't use its bundled |can't use its bundled |mfc80u.dll? |mfc80u.dll (enhance | |assembly search sequence to | |include private assemblies | |in application subfolders) Ever Confirmed|0 |1
--- Comment #3 from Anastasius Focht focht@gmx.net 2011-10-17 16:17:10 CDT --- Hello,
well the application developers decided to deploy the VC++ runtime as private assemblies in application subfolders and not in global WinSxS store.
Wine currently only searches global shared assembly store and not in folders of the application's directory structure.
See MSDN: msdn.microsoft.com/en-us/library/aa374224.aspx (Assembly Searching Sequence)
A simplified assembly search sequence would be:
1) WinSxS folder 2) <appdir><assemblyname>.dll 3) <appdir><assemblyname>.manifest 4) <appdir><assemblyname><assemblyname>.dll 5) <appdir><assemblyname><assemblyname>.manifest ...
Interesting tidbit:
The application uses some sandboxing/app virtualization scheme similar to Thinstall and Xenocode. Judging from the mappings/sections its most likely "MoleBox".
The dll in question that has the MFC binding is not directly visible in filesystem but mapped in memory.
MBX@28@48E1E8_### (2 KiB in AppData folder) -> "C:\3D RAD GAMES\BELTBALL V102\dll3impact.dll" (not present on disk)
Dump of dll manifest from memory:
--- snip --- <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.MFC" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> </assembly> --- snip ---
$ wine --version wine-1.3.30-205-g472a8f7
Regards
http://bugs.winehq.org/show_bug.cgi?id=21790
--- Comment #4 from Austin English austinenglish@gmail.com 2012-02-03 17:42:35 CST --- Still in 1.4-rc2.
http://bugs.winehq.org/show_bug.cgi?id=21790
Christian Costa titan.costa@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |titan.costa@gmail.com
--- Comment #5 from Christian Costa titan.costa@gmail.com 2013-06-01 09:54:13 CDT --- Still in 1.5.31.
http://bugs.winehq.org/show_bug.cgi?id=21790
Andrey Gusev andrey.goosev@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |andrey.goosev@gmail.com
--- Comment #6 from Andrey Gusev andrey.goosev@gmail.com 2013-09-20 23:47:12 CDT --- The same with Death to Spies - Moment of Truth demo. It's also needed mfc80u.dll
fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC80.MFC" (8.0.50727.762) err:module:import_dll Library MFC80U.DLL (which is needed by L"C:\Program Files\Death to Spies - Moment of Truth Demo\TruthSetup.exe") not found err:module:LdrInitializeThunk Main exe initialization for L"C:\Program Files\Death to Spies - Moment of Truth Demo\TruthSetup.exe" failed, status c0000135
On 1.7.2
http://bugs.winehq.org/show_bug.cgi?id=21790
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|loader |ntdll
http://bugs.winehq.org/show_bug.cgi?id=21790
--- Comment #7 from Nikolay Sivov bunglehead@gmail.com 2013-09-23 11:02:18 CDT --- It seems to me that a problem with current code is that module file name is not resolved correctly:
--- 0025:trace:actctx:RtlCreateActivationContext 0x32f780 0000008a 0025:trace:actctx:RtlCreateActivationContext module=0x10000000 0025:trace:actctx:RtlCreateActivationContext appdir init=L"C:\USERS\NSIVOV\LOCAL SETTINGS\APPLICATION DATA\.#\" 0025:trace:actctx:get_manifest_in_module looking for res #0002 in module 0x10000000 L"C:\USERS\NSIVOV\LOCAL SETTINGS\APPLICATION DATA\.#\MBX@24@48E1E8.###" 0025:trace:actctx:parse_manifest parsing manifest loaded from (null) base dir (null) ... 0025:trace:actctx:lookup_assembly looking for name=L"Microsoft.VC80.MFC" version=8.0.50727.762 arch=L"x86" 0025:warn:actctx:lookup_manifest_file no matching file for L"x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.*.*_*_*.manifest" 0025:trace:actctx:lookup_assembly appdir=L"C:\USERS\NSIVOV\LOCAL SETTINGS\APPLICATION DATA\.#\" 0025:trace:actctx:lookup_assembly try 0 - L"C:\USERS\NSIVOV\LOCAL SETTINGS\APPLICATION DATA\.#\\Microsoft.VC80.MFC.dll" 0025:trace:actctx:lookup_assembly try 0 - L"C:\USERS\NSIVOV\LOCAL SETTINGS\APPLICATION DATA\.#\\Microsoft.VC80.MFC.manifest" 0025:trace:actctx:lookup_assembly try 1 - L"C:\USERS\NSIVOV\LOCAL SETTINGS\APPLICATION DATA\.#\\Microsoft.VC80.MFC\Microsoft.VC80.MFC.dll" 0025:trace:actctx:lookup_assembly try 1 - L"C:\USERS\NSIVOV\LOCAL SETTINGS\APPLICATION DATA\.#\\Microsoft.VC80.MFC\Microsoft.VC80.MFC.manifest" 0025:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC80.MFC" (8.0.50727.762) ---
This is a log with some additional TRACEs I added.
(In reply to comment #3)
The dll in question that has the MFC binding is not directly visible in filesystem but mapped in memory.
MBX@28@48E1E8_### (2 KiB in AppData folder) -> "C:\3D RAD GAMES\BELTBALL V102\dll3impact.dll" (not present on disk)
Hi, Anastasius.
Where does this module name come from? So far incorrect path is the only problem that breaks dependency lookup.
http://bugs.winehq.org/show_bug.cgi?id=21790
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |obfuscation
--- Comment #8 from Anastasius Focht focht@gmx.net 2013-09-23 16:51:52 CDT --- Hello Nikolay,
well, as I said in my comment #3 ... It's an app virtualization scheme similar to Thinstall and Xenocode that hooks various native API. Invalid paths/names as seen in Wine traces are in fact part of all those schemes. They have no meaning to outside (filesystem) because calls get intercepted and parameters are internally translated/mapped to different objects.
If it still doesn't work one of the reasons could be that Wine doesn't behave like native, e.g. misses out some internal native API calls/sequences in order for those hooks to work.
Regards
http://bugs.winehq.org/show_bug.cgi?id=21790
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|3D Rad demo "BeltBall" |3D Rad demo "BeltBall" |can't use its bundled |can't use its bundled |mfc80u.dll (enhance |mfc80u.dll (assembly search |assembly search sequence to |fails as in-memory dll path |include private assemblies |is not set properly due to |in application subfolders) |obfuscation scheme)
--- Comment #9 from Nikolay Sivov bunglehead@gmail.com 2013-09-24 00:11:56 CDT --- (In reply to comment #8)
If it still doesn't work one of the reasons could be that Wine doesn't behave like native, e.g. misses out some internal native API calls/sequences in order for those hooks to work.
I see. Adjusting summary, as it's not limited to assembly search, which actually should work if a valid path is given.
Regards
http://bugs.winehq.org/show_bug.cgi?id=21790
--- Comment #10 from Anastasius Focht focht@gmx.net 2013-09-24 03:01:05 CDT --- Hello Nikolay,
I had a quick look and it seems Wine just bails when the global winsxs manifest doesn't match which is expected because it covers only a single revision "8.0.50727.4053" (not a range).
--- snip --- 0009:trace:actctx:RtlCreateActivationContext 0x33f6fc 0000008a 0009:trace:actctx:get_manifest_in_module looking for res #0002 in module 0x10000000 L"C:\USERS\FOCHT\LOCAL SETTINGS\APPLICATION DATA\.#\MBX@8@48E1E8.###" 0009:trace:actctx:parse_manifest parsing manifest loaded from (null) base dir (null) 0009:trace:actctx:parse_assembly_elem (0x33f4fc) 0009:trace:actctx:parse_assembly_identity_elem name=L"Microsoft.VC80.CRT" version=8.0.50727.762 arch=L"x86" 0009:trace:actctx:parse_dependent_assembly_elem adding name=L"Microsoft.VC80.CRT" version=8.0.50727.762 arch=L"x86" 0009:trace:actctx:parse_assembly_identity_elem name=L"Microsoft.VC80.MFC" version=8.0.50727.762 arch=L"x86" 0009:trace:actctx:parse_dependent_assembly_elem adding name=L"Microsoft.VC80.MFC" version=8.0.50727.762 arch=L"x86" 0009:trace:actctx:lookup_assembly looking for name=L"Microsoft.VC80.CRT" version=8.0.50727.762 arch=L"x86" 0009:trace:actctx:get_manifest_in_manifest_file loading manifest file L"\??\C:\windows\winsxs\manifests\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_deadbeef.manifest" 0009:trace:actctx:parse_manifest parsing manifest loaded from L"\??\C:\windows\winsxs\manifests\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_deadbeef.manifest" base dir L"x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_deadbeef" 0009:trace:actctx:parse_assembly_elem (0x33f36c) 0009:trace:actctx:parse_assembly_identity_elem name=L"Microsoft.VC80.CRT" version=8.0.50727.4053 arch=L"x86" 0009:trace:actctx:parse_file_elem name=L"msvcr80.dll" 0009:trace:actctx:parse_file_elem name=L"msvcp80.dll" 0009:trace:actctx:parse_file_elem name=L"msvcm80.dll" 0009:trace:actctx:lookup_assembly looking for name=L"Microsoft.VC80.MFC" version=8.0.50727.762 arch=L"x86" 0009:warn:actctx:lookup_manifest_file no matching file for L"x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.*.*_*_*.manifest" 0009:fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC80.MFC" (8.0.50727.762) --- snip ---
lookup_assembly -> lookup_winsxs() -> stop
Maybe it shouldn't stop here but continue searching local manifests for a match.
@Andrey Gusev (comment #6)
Your problem has nothing to do with this bug. Use 'winetricks vcrun2005' to install missing MFC80u.dll
Regards
http://bugs.winehq.org/show_bug.cgi?id=21790
--- Comment #11 from Nikolay Sivov bunglehead@gmail.com 2013-09-24 03:20:39 CDT --- No, I don't think it's the case. It stops if lookup_winsxs() fails for a reason that's not STATUS_NO_SUCH_FILE. It's normal to get this status when no assembly is found in winsxs. A part of log I posted in comment 7 contains all local paths it tries after lookup_winsxs() failed to find it. Some traces added to for(..) loop show that it's actually executed (try number in my log is 'i' value).
So the real problem seems as you described - we don't get a proper path to application dir for that module loaded with MBX@8@48E1E8.### name. Probably get_module_filename() should use some hooked call instead of picking data from loader structures directly, or a failure happens even earlier and loader data should actually point to application dir and we shouldn't even see this generated names.
https://bugs.winehq.org/show_bug.cgi?id=21790
--- Comment #12 from Andrey Gusev andrey.goosev@gmail.com --- Still in 1.7.37
https://bugs.winehq.org/show_bug.cgi?id=21790
super_man@post.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |super_man@post.com
--- Comment #13 from super_man@post.com --- still fails 1.7.51
https://bugs.winehq.org/show_bug.cgi?id=21790
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- URL|http://www.3drad.com/games/ |http://web.archive.org/web/ |BeltBall%20v102.exe |20150317165053/http://3drad | |.com/games/BeltBall%20v102. | |exe
--- Comment #14 from Bruno Jesus 00cpxxx@gmail.com --- Still in Wine 2.1, winetricks vcrun2005 is still a workaround.
https://bugs.winehq.org/show_bug.cgi?id=21790
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Blocks| |21791
https://bugs.winehq.org/show_bug.cgi?id=21790
winetest@luukku.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |winetest@luukku.com
--- Comment #15 from winetest@luukku.com --- still valid wine 5.20.
https://bugs.winehq.org/show_bug.cgi?id=21790
--- Comment #16 from Gijs Vermeulen gijsvrm@gmail.com --- Still present with wine-9.0rc1.