http://bugs.winehq.org/show_bug.cgi?id=25981
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net Component|-unknown |ntdll Summary|Duty Calls: fails to find |Duty Calls: loader fails to |msvcm90.dll (installed by |resolve msvcm90.dll due to |vcrun2008) |partial manifest data in | |WinSxS (empty assembly list | |for process default | |activation context) Severity|minor |normal
--- Comment #1 from Anastasius Focht focht@gmx.net 2011-07-17 08:20:03 CDT --- Hello,
there is no need for 'winetricks vcrun2008' prerequisite, the installer will install VC++ 2008 redist on its own. An indication of the problem is actually this message:
--- snip --- austin@aw21 ~/.wine/drive_c/Program Files/Duty Calls/binaries/Win32 $ wine DutyCalls.exe fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC80.CRT" (8.0.50727.762) fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC80.CRT" (8.0.50727.762) --- snip ---
Even if Wine ships/implements lots of VC++ 200X runtime dlls now, they are still not "WinSxS" registered (e.g. have no manifest data there).
Dump of application manifest (PE resource):
--- snip --- <!-- Copyright 1981-2001 Microsoft Corporation --> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<!-- Tell Vista we don't need administrator level access--> <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2"> <ms_asmv2:security> <ms_asmv2:requestedPrivileges> <ms_asmv2:requestedExecutionLevel level="asInvoker" uiAccess="false" /> </ms_asmv2:requestedPrivileges> </ms_asmv2:security> </ms_asmv2:trustInfo>
<dependency> <dependentAssembly> <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.30729.1' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' /> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> </dependentAssembly> </dependency> </assembly> --- snip ---
Both VC++ 2005 and 2008 runtimes are referenced.
If the executable has a resource of type RT_MANIFEST with ID CREATEPROCESS_MANIFEST_RESOURCE_ID the loader will create a process default activation context. The process default activation context will be used by all dependent dlls loaded in the process. For dlls that have private dependencies (other than process defaults), ID ISOLATIONAWARE_MANIFEST_RESOURCE_ID is used. The loader creates a new activation context and uses it to probe the dll's dependencies. It actually does it successfully in this case because all "custom" dlls with assembly manifests only reference the VC++ 2008 runtime -> properly registered within WinSxS.
In your case the primary (default) process activation context must be valid (e.g. contain assembly references) to have dependencies like "msvcm90.dll" resolved for the main execuable.
Because of missing VC++ 2005 runtime manifests, the _whole_ assembly list for default process activation context is empty - even if the VC++ 2008 manifest was parsed successfully earlier.
You need: 'winetricks vcrun2005' to get the manifests.
Either Wine needs to tolerate missing/partial manifest data and still have the default process activation context contain the rest of parsed dependencies or it must start placing "fake" manifests on its own.
Regards