I've been looking into a tricky requirement today...
Two applications have been developed over time using a number of COM components that
were initially shared, however over time breaking changes to these COM components
have been made in isolation which has resulted in making them incompatible with the
other version (and they unfortunately still use the same GUIDs)
The bottom line is that both applications won't run together on one box (an all too
often occurence I find), and the codebase is too complicated/scary to rework the component
They're looking to migrate to .NET gradually over the coming year and were hoping
that they could use some of the funky side by side (SxS) functionality in .NET
to help them out.
I started off by digging around the .NET side by side technology (which is really
impressive), assembly manifests, etc. and was chatting to my colleague Morgan who
found this gem of
an article which details the DLL/COM Redirection SxS technology introduced circa 1999!!
It works a treat, you stick all the COM components used by the application in the
same directory as your app and create an empty file called <YourApplicationName>.exe.local in
the same directory.
This activates the DLL/COM redirection plumbing, If a version of the component
is found in the local directory, the application will use it regardless of any directory
path specified in the application or the registry!
This also works for DLLs used by your application (LoadLibrary, etc.)