Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regasm writes mscoree.dll into Registry key InprocServer32

When I register my .NET Assembly with regasm.exe the registry key

HKEY_CLASSES_ROOT\CLSID{111E32AD-4BF8-495F-AB4D-6C61BD463EA4}\InprocServer32

is set to "mscoree.dll".

However, I am trying to mimic an existing COM-Server that was written in C. When registering this old COM-server the InprocServer32 is set to the full path to this component.

Unfortunately the existing system (a plugin host that I can not change) reads and use this value - an is confused by the "mscoree.dll" value.

My solution might be to patch this registry entry manually - but I would like to understand why regasm writes "mscoree.dll" into InprocServer32 .

like image 248
Stiefel Avatar asked May 28 '10 09:05

Stiefel


1 Answers

The explanation is quite easy. When you use a native (unmanaged) COM server in-proc, it is loaded into the consumer process and the consumer process directly calls its functions.

This can't work that easily with a managed code COM-exposed assembly. In case of managed code an intermediate layer is needed that performs the managed/unmanaged interaction. mscoree.dll acts as this intermediate layer. So when the consumer calls CoCreateInstance() mscoree.dll is loaded and emulates the COM server by loading the COM-exposed assembly managed code and forwardind all calls to the latter.

like image 69
sharptooth Avatar answered Oct 03 '22 04:10

sharptooth