分離アプリケーションとSide-by-Sideアセンブリ

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。HRoestBot (会話 | 投稿記録) による 2012年4月14日 (土) 04:37個人設定で未設定ならUTC)時点の版 (r2.6.5) (ロボットによる 追加: ru:Side-by-side assembly)であり、現在の版とは大きく異なる場合があります。

分離アプリケーションと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]、これによって区別される。

このうち、少なくとも種別・名前・バージョンが必須である。

アセンブリは、共有アセンブリとプライベートアセンブリに区別される。

共有アセンブリ

共有アセンブリは様々なアプリケーションにまたがって用いられるアセンブリであり、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アセンブリと同じ目的を持ち、その前身であると言える。

脚注

  1. ^ Windows XP ビジュアル スタイルの使用”. MSDNライブラリ. マイクロソフト (2001年8月20日). 2008年11月8日閲覧。
  2. ^ C/C++ 分離アプリケーションおよび side-by-side アセンブリのビルド”. MSDNライブラリ. マイクロソフト (2007年11月). 2008年11月8日閲覧。
  3. ^ Assembly Manifests” (英語). MSDNライブラリ. マイクロソフト (2007年11月1日). 2008年11月8日閲覧。
  4. ^ Installing Side-by-side Assemblies as Shared Assemblies” (英語). MSDNライブラリ. マイクロソフト (2007年11月1日). 2008年11月8日閲覧。
  5. ^ Step 6: Create and Embed an Application Manifest (UAC)”. MSDNライブラリ. マイクロソフト. 2008年11月8日閲覧。
  6. ^ 高 DPI 対応の Win32 アプリケーションを記述する”. Windows 7 ホワイト ペーパー. マイクロソフト (2009年4月28日). 2010年12月29日閲覧。
  7. ^ アプリケーション マニフェスト”. MSDN ライブラリ. マイクロソフト (2009年8月4日). 2010年12月29日閲覧。
  8. ^ Using Side-by-Side Assemblies as a Resource” (英語). MSDNライブラリ. マイクロソフト (2007年11月1日). 2008年11月8日閲覧。

参考

以下はMSDNライブラリ内

関連項目