DLL Hell refers to the set of problems caused when multiple
applications attempt to share a common component like a dynamic link library
(DLL) or a Component Object Model (COM) class. In the most typical case, one
application will install a new version of the shared component that is not
backward compatible with the version already on the machine. Although the
application that has just been installed works well, existing applications that
depended on a previous version of the shared component might no longer work.
DLL Hell is
where loading one program breaks another program. Basically, any time an
application replaces or loads an executable used by another application, there
is a risk. It doesn't matter if the executable is an exe, vxd, dll, or something else, the risk is the same, and the user
has no control over what is happening.
To make matters worse, when clients install software that
you've written, your software might break other, un-related, applications on
the client’s machine. This is particularly true if you've used a Microsoft
compiler. (Mfc42.dll is known to cause this type of problem.)
When loading or exiting one application causes another
application to throw up an error, we may have a compatibility issue. Microsoft
has promised to fix this issue, but until then we need to figure out which
application is more important. The application we need should be re-installed
after uninstalling the application we don't need. Or try to get the latest
version or updated version of each application. This dll
hell issue is not easy to resolve, and may take time. This is why it may be
easier to just remove one application.
Solution to DLL Hell
.NET Framework 1.1 introduced something called side-by-side
execution. Side by side is the ability to install and run multiple versions of
the same component on the machine concurrently at the same time without
interfering with each other. With components that support side-by-side, authors
aren't necessarily tied to maintaining strict backward compatibility because
different applications are free to use different versions of a shared
component.