We are adapting our client side to a relatively complex application (ActiveX / .net / Delphi / C ++ / COM) to use SxS to provide deployment and isolation without administration from older versions of our product.
We were able to achieve this goal for almost all of our proc components, such as our .net ui, Delphi ui and COM servers that we use in proc, creating a manifest file that describes all the libraries used by our process without registering on the client any of the components (almost).
And here comes almost part: At the moment, our application calls (part of C ++ from it) from the ActiveX proc server (Delphi ActiveX EXE), which, in turn, calls another set of ActiveX proc servers (third-party plugins, all goes here, Delphi, C ++, any thing, as long as it is from proc ActiveX EXE and implements our interfaces).
As we know, SxS does not support out-of-band ActiveX servers. And we cannot use these objects, as in proc com-servers, in our main process, because this will require serious processing of our application and even the worst, breaking our public API, which is used by third-party tools and providers, an api that we don’t we can allow it.
We stumbled upon this article , which describes how IHTMLDocument2 can be extracted from an Internet Explorer window running in a separate process. What made us think about it:
We will create a secondary satellite application / process that will run ActiveX, as on a process server. Then we will use LresultFromObject and ObjectFromLresult to transfer the ActiveX object link from the satellite application to the main application process. The satellite application will have its own manifest file, which will allow it to work in SxS mode.
The same approach will be used to communicate between this Delphi ActiveX EXE and third-party AciveX EXE plugins
, , .net remoting .net com proxy , , com .net remoting com .
, :