分離アプリケーションとSide-by-Sideアセンブリ
分離アプリケーションとSide-by-Sideアセンブリ (Isolated Applications and Side-by-side Assemblies)とは、Windows XPで導入された複数バージョンのソフトウェアコンポーネントの衝突を避けるための仕組みである。システム上に複数バージョンのコンポーネントを共存させ、アプリケーションごとに適切なバージョンのコンポーネントを選択可能にすることで、DLL地獄の解消を意図している。.NET Frameworkにおけるバージョン管理の仕組みをWindowsネイティブに持ち込んだものという見方もできる。
目次 |
使用例 [編集]
分離アプリケーション [編集]
分離アプリケーションとは、後述するアプリケーションマニフェストに自己の使用するコンポーネント(Side-by-Sideアセンブリ)を記述したアプリケーションである。分離アプリケーションの実行時、Win32システムはアプリケーションマニフェストを見て、読み込むべきアセンブリのバージョンを決定する。アセンブリは自身専用のプライベートアセンブリか、複数のバージョンが共存する共有アセンブリとして存在するため、他のアプリケーションによるアセンブリの追加・削除・更新などの影響を受けずに済む。
Side-by-Sideアセンブリ [編集]
Side-by-Sideアセンブリとは、DLL、ウィンドウクラス、COMサーバ、タイプライブラリ、COMインタフェースなどの集合をマニフェストに記載したものである。
アセンブリは自身について次のような情報を持ち[3]、これによって区別される。
- 種別 (win32など)
- 名前
- 言語
- プロセッサアーキテクチャ
- バージョン
- 公開キートークン
このうち、少なくとも種別・名前・バージョンが必須である。
アセンブリは、共有アセンブリとプライベートアセンブリに区別される。
共有アセンブリ [編集]
共有アセンブリは様々なアプリケーションにまたがって用いられるアセンブリであり、WinSxSフォルダにインストールされる。インストールにはデジタル署名とWindows Installerの使用が求められる[4]。例え同名のファイルでも、異なるアセンブリに属していれば、異なるサブディレクトリに格納され、上書きされることはない。
プライベートアセンブリ [編集]
プライベートアセンブリは共有されることなくアプリケーションが個別に用いるアセンブリである。共有アセンブリと違いインストールの必要がない。アプリケーションの実行ファイルの存在するディレクトリもしくはそのサブディレクトリに配置される。そのため、共有アセンブリを使用しないアプリケーションは、インストーラを使用せず単純なファイルコピーのみでアプリケーションを使用できる。
マニフェスト [編集]
マニフェストは分離アプリケーション、Side-by-Sideアセンブリの双方で自己について記載するXMLファイルであり、拡張子manifestを持つ。分離アプリケーションが用いるものをアプリケーションマニフェスト、Side-by-Sideアセンブリが用いるものをアセンブリマニフェストと呼ぶ。
以下にWindows XP ビジュアル スタイルの使用(MSDNライブラリ)にあるアプリケーションマニフェストの例を引用する。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="CompanyName.ProductName.YourApp" type="win32" /> <description>アプリケーションの説明</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
assemblyIdentity要素およびdescription要素では、分離アプリケーション自身の情報について記述する。そして、dependentAssembly要素でこのアプリケーションが参照するSide-by-Sideアセンブリの情報を記載する。assemblyIdentity要素1つがアセンブリ1つに対応する。
アプリケーションマニフェストは、通常、分離アプリケーションの実行時に読み込まれるが、アクティベーションコンテキストAPIを使用することでより細かく制御できる。
なお、分離アプリケーションとSide-by-Sideアセンブリに関する項目のほか、アプリケーションマニフェストには以下の項目も存在する。
- ユーザーアカウント制御に関するもの(Windows Vistaより)[5]。
- 高DPI対応の宣言(Windows Vistaより)[6]。
- Windowsへの互換性表明(Windows 7より)[7]。この機能が搭載されたのはWindows 7からではあるものの、Windows Vistaへの互換を宣言する旨の項目も用意されている。
マニフェストは「実行ファイル名.manifest」という名前で実行ファイルと同じフォルダに置くか、リソースとして実行ファイルに埋め込むことで機能する[8]。
構成ファイル [編集]
アセンブリの配布を始めた後に、使用するアセンブリの変更を行うための仕組みである。
例えば、セキュリティ上の問題が発覚した場合、発行者構成ファイルをWinSxSにインストールすると、プライベートアセンブリを使用していた分離アプリケーションでもバージョンが該当すれば、共有アセンブリにインストールされたより新しいバージョンを使用させると言ったことも可能である。
Side-by-Sideコンポーネント共有 [編集]
Side-by-Sideコンポーネント共有とは、Windows 98およびWindows 2000においてコンポーネントの衝突を避けるための実装技術である。分離アプリケーションとSide-by-Sideアセンブリと同じ目的を持ち、その前身であると言える。
脚注 [編集]
- ^ “Windows XP ビジュアル スタイルの使用”. MSDNライブラリ. マイクロソフト (2001年8月20日). 2008年11月8日閲覧。
- ^ “C/C++ 分離アプリケーションおよび side-by-side アセンブリのビルド”. MSDNライブラリ. マイクロソフト (2007年11月). 2008年11月8日閲覧。
- ^ “Assembly Manifests” (英語). MSDNライブラリ. マイクロソフト (2007年11月1日). 2008年11月8日閲覧。
- ^ “Installing Side-by-side Assemblies as Shared Assemblies” (英語). MSDNライブラリ. マイクロソフト (2007年11月1日). 2008年11月8日閲覧。
- ^ “Step 6: Create and Embed an Application Manifest (UAC)”. MSDNライブラリ. マイクロソフト. 2008年11月8日閲覧。
- ^ “高 DPI 対応の Win32 アプリケーションを記述する” (日本語). Windows 7 ホワイト ペーパー. マイクロソフト (2009年4月28日). 2010年12月29日閲覧。
- ^ “アプリケーション マニフェスト” (日本語). MSDN ライブラリ. マイクロソフト (2009年8月4日). 2010年12月29日閲覧。
- ^ “Using Side-by-Side Assemblies as a Resource” (英語). MSDNライブラリ. マイクロソフト (2007年11月1日). 2008年11月8日閲覧。
参考 [編集]
以下はMSDNライブラリ内
- Windows XP で分離アプリケーションと Side-by-Side アセンブリをビルドし、サービスを提供する方法
- C/C++ 分離アプリケーションおよび side-by-side アセンブリのビルド
- Isolated Applications and Side-by-side Assemblies