Side-by-Side Sharing
The workings of the new (XP) UI rely on a side-by-side sharing
requirements structure. As a solution for versioning problems and DLL
Hell, Microsoft strongly suggests that applications adopt a side-by-side
versioning strategy. As seen in the implementation of ComCtl version 6,
side-by-side components are the future of Windows development. This
section gives you an overview about what's new for side-by-side sharing
for Windows XP. For an in-depth look into this topic, see How To Build
and Service Isolated Applications and Side-by-Side Assemblies for
Windows XP. For background on side-by-side component sharing issues and
DLL redirection, see Implementing Side-by-Side Component Sharing in
Applications (Expanded).
With side-by-side components, multiple versions of a component are
installed simultaneously. An application is bound to the version of the
component with which it was designed and tested.
With Windows XP, there's an infrastructure to support assemblies and
isolated applications (both COM+ and Win32). A code change should not be
required to get at side-by-side assemblies from Win32 applications.
Applications can use the latest system assemblies without global impact.
In short, isolated applications are valuable because they are more
reliable. They are built and shipped with all needed components and are
not affected by changes that other applications make. Isolated
applications use a manifest, which is an XML file containing information
that self-describes an assembly or an application. All binding and
activation metadata, such as COM classes, interfaces, and type
libraries, is now stored in the manifest, rather than the registry.
There are two types of manifest files: applications manifests, which
describe isolated applications, and assembly manifests, which describe
individual assemblies.
An isolated application may use side-by-side assemblies. Assemblies are
the fundamental units of naming, binding, versioning, deployment, and
configuration. They come in two varieties, shared and private. A shared
assembly is available for use by multiple applications on the computer,
installed in the WinSxS folder in the Windows directory. A private
assembly is only visible to that application and is deployed within the
directory structure of the application.
There's another benefit for application developers in using side-by-side
sharing; your schedule can be much clearer. Your development schedules
are not affected by the release schedules of the components you use.
[end quote]
http://msdn.microsoft.com/en-us/library/ms997638.aspx
Windows 2000 doesn't understand diddly squat of these new Side-by-Side
Assemblies, here are more passages from Microsoft articles:
"If you install your application on a computer that is running Microsoft
Windows 2000 or earlier versions of Windows, do not ship the
side-by-side assembly in your application folder to those operating
systems. Instead, the side-by side assemblies should be used from the
system folder. If you install a shared component to the system folder as
part of your setup, make sure that you are not downgrading the version
if one is previously present."
http://msdn.microsoft.com/en-us/library/ms997620.aspx
and:
"On versions of Windows that do not support deployment of shared
side-by-side assemblies, such as Windows 98 and Windows 2000 Server, the
Visual C++ libraries are installed in the System32 folder and WinSxS
folder under the operating system root directory. This setup enables
running Visual C++ applications on these operating system versions
because they do not support manifest-based binding of applications to
dependent DLLs. On these operating systems, when an application is
loaded, the corresponding manifest file is ignored and the operating
systems searches for dependent DLLs using paths set in the current
running environment. However, on upgrading the operating system to a
version that support manifest-based binding, such as Windows XP, Windows
Server 2003, or Windows Vista, applications built with manifests start
using the DLLs installed in the WinSxS folder."
http://msdn.microsoft.com/en-us/library/ms235624(VS.80).aspx
John