Trying buildbot on wine; foiled by distutils expecting mscoree to be resident?

Louis Lenders xerox_xerox2000 at yahoo.co.uk
Fri May 1 07:04:01 CDT 2009


> so I tried doing
>   wine pywin32-212.win32-py2.6.exe
> first.  This fails immediately as described in
> http://bugs.winehq.org/show_bug.cgi?id=13844
> It seems to terminate because it tries to get
> a handle to the loaded copy of mscoree.dll
> and fails (because there isn't one).
> 
> The installer seems to have been created by python's distutils.
> 
> Mark Hammond seems to be well aware of low level
> issues that affect the installer, see e.g.
> http://bugs.python.org/issue5075
> so perhaps he could explain why the installer expects
> mscoree.dll to be resident...
> 
> 

This is explained here: http://bugs.winehq.org/show_bug.cgi?id=6880#c7 (I guess
it's the same issue)

Copy and paste:

--- snip ---
I've seen quite some applications that fail in the end like this one:
0009:Call kernel32.GetModuleHandleA(011bf1d4 "mscoree.dll") ret=00c5936f
0009:Ret  kernel32.GetModuleHandleA() retval=00000000 ret=00c5936f
Then ExitProcess.
--- snip ---

This has nothing to do with this bug.
The application uses dynamic msvc 7.1 runtime, which implicitly pulls
mscoree.dll in.

Normally mscrt __crtExitProcess() calls just ExitProcess() but on newer versions
 a call to __crtCorExitProcess() is made to ensure proper shutdown of managed
parts (even if you don't use managed = .NET code).

CorExitProcess() basically does this:

--- snip ---
hModule = GetModuleHandle("mscoree.dll");
if (hModule != NULL)
{
   pfn = (PFN_EXIT_PROCESS) GetProcAddress( hModule, "CorExitProcess");
   if (pfn != NULL) 
     pfn(status);
}
--- snip ---

If mscoree module or the export is not found it causes no harm.
It works as designed.

The reason for this additional (implicit) shutdown code is you have no control
whether a part of operation system or application dll (3rd party/injected) might
pull in managed stuff thats why this code exists.

Regards







More information about the wine-devel mailing list