[Bug 25981] Duty Calls: loader fails to resolve msvcm90.dll due to partial manifest data in WinSxS (empty assembly list for process default activation context)

wine-bugs at winehq.org wine-bugs at winehq.org
Sun Jul 17 08:20:04 CDT 2011


http://bugs.winehq.org/show_bug.cgi?id=25981

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |focht at 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 at 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 at 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

-- 
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