連載
» 2006年03月11日 05時00分 公開

連載 ClickOnceの真実:第2回 ClickOnceの仕組みを理解しよう (2/2)

[一色政彦,デジタルアドバンテージ]
前のページへ 1|2       

ClickOnceアプリが更新される仕組み

 ここまでの説明で、ClickOnceアプリは常にClickOnceキャッシュ領域にキャッシュ(=配置)されることが分かった。当然ながらClickOnceアプリのアップデートも、このキャッシュ内容が更新されることで実現される。この仕組みは、冒頭で述べたとおり、オンラインで実行してもオフラインで実行しても変わらない。

●ClickOnceアップデートの流れ(ClickOnceローダー)

 次の図は、アップデート時のエントリ・ポイントとなる[スタート]メニューのショートカットの実行からClickOnceアプリが更新、実行されるまでの流れを図示したものだ。ちなみにClickOnceアプリ・インストール用のWebページの[インストール]ボタンをクリックしてClickOnceアプリを更新、実行した場合の処理の流れは、先ほど説明したClickOnceデプロイメントの流れとほぼ同じになる。

ClickOnceアップデートでのClickOnceローダーの働き
エントリ・ポイントとなる[スタート]メニューのショートカットの実行からClickOnceアプリが実行されるまでの流れを図示したものだ。各番号の説明は以下の本文にある。この画像をクリックして別ウィンドウで表示しながら以下の説明を読むと便利だ。

(1)[スタート]メニューに配置されたClickOnceアプリへのショートカットをクリックすると、Windowsシステムがそのショートカット先の.appref-msファイル(アプリケーション参照。「アプリケーション・リファレンス」とも呼ばれる)を実行する(本稿の例では[スタート]メニューの[すべてのプログラム]−[Digital Advantage]−[SampleApplication]をクリックすると、「SampleApplication.appref-ms」が実行される)。Windowsシステムは、「.appref-ms」という拡張子名に基づき、ClickOnceローダー(dfsvc.exe)を起動する*8

*8 .appref-msファイルが(例えばダブルクリックされるなどして)実行されると、拡張子の関連付けに基づき「%windir%\system32」フォルダのdfshim.dllファイル(=Application Deployment Support Library)のShOpenVerbShortcutというAPIが呼び出される。これによりClickOnceローダー(dfsvc.exe)が起動することになる。


(2)ここでClickOnceローダーは、.appref-msファイル(アプリケーション参照)の内容*9を読み込み、配置マニフェスト(.applicationファイル)の場所を特定する。

*9 アプリケーション参照(.appref-msファイル)には、配置マニフェスト(.applicationファイル)への参照情報が記述されている。本稿の場合、次のような情報が記述されている。
http://dapc89/SampleApplication/SampleApplication.application#SampleApplication
.application, Culture=neutral, PublicKeyToken=5996c692db4c640c, processorArchitecture=msil


(3)ClickOnceローダーは、前回ClickOnceキャッシュ領域にダウンロードされた配置マニフェストを参照して更新チェックのタイミング(起動時に確認するか、毎回実行中に確認するか、何日後の実行中に確認するかなど)を確定する。ここではまだ更新を行わない場合は(7)以降のClickOnceアプリの起動処理に実行を移す。更新する場合は(例えばこれがデフォルトの「アプリケーションの開始前に更新バージョンの確認を行う」に設定されている場合など)、ここでサーバ上の配置マニフェスト(.applicationファイル)を読み込み、内容を解析する。その解析結果から、ClickOnceアプリのバージョンやアプリケーション・マニフェスト(.manifestファイル)の場所などの情報を特定する。

(4)実際の更新処理を開始する前に、サーバ上に更新バージョンがあることをユーザーに対して通知し、更新の許可を求める(詳しくは前回の「[利用可能な更新があります]ダイアログ」を参照)。ここで[OK]を選択して更新を許可すると次の(5)の処理に進み、[スキップ]を選択すると今回は更新せずに((5)(6)の更新処理をスキップして)(7)の処理に進む。

(5)SampleApplication.exe.manifest(アプリケーション・マニフェスト)を読み込んで解析して、ダウンロードすべきアセンブリやファイルを決定する。

(6)そして実際に、それらをClickOnceキャッシュ領域にダウンロードする。ここがClickOnceの気の利いたところなのだが、その際、更新の効率性を高めるため*10、変更されたファイル(例えば配布が必要なヘルプ・ファイルなど)とアセンブリだけがダウンロードされる(つまり更新のたびにアプリケーション全体がダウンロードされるわけではない)。

*10 ちなみに、初回にダウンロードするファイルやアセンブリを減らして転送量を最小限に抑えるのに役立つ「ダウンロード・グループ」という機能があるが、これについては次回紹介する。


(7)次に、ダウンロードしたClickOnceアプリが、完全信頼(Full Trust)アプリケーションなのか、部分信頼(Partial Trust)アプリケーションなのかによって、条件分岐する。

(8)完全信頼アプリケーションの場合、通常どおり実行ファイル(.exeファイル)を起動する。

(9)部分信頼アプリケーションの場合、ここでClickOnceホスト(AppLaunch.exe)が起動される。ClickOnceアプリは、このClickOnceホスト上で実行開始される。

 以上が一連のClickOnce更新の仕組みだ。なおClickOnceのアップデート機能はWebサーバなどのサーバにアクセスして更新を行う仕様となっているため、CD-ROMなどのメディアを使ってClickOnceアプリをインストールしたとしても、それを更新するにはどうしてもネットワークに接続されている必要があることに注意してほしい。

 最後にClickOnceで使われるマニフェスト・ファイルについて説明しておこう。

ClickOnceで使われるマニフェスト・ファイル

 すでに見てきたように、ClickOnceでは、配置マニフェスト(.applicationファイル)とアプリケーション・マニフェスト(.manifestファイルと)という2つのXMLファイルが基盤となっている。これらのファイルの内容に関するもう少し詳しい情報を以下にまとめた。

 なおマニフェスト・ファイルは自動的に作成できるので(詳細は次回)、XML要素の名前などは細かく覚える必要はない。ここでは単にどのファイルにどのような内容が記述されているかを知っておけば十分だろう。

●配置マニフェスト(.applicationファイル)

 配置マニフェストには、ClickOnceアプリの配布や更新を管理するうえで必要となるアプリケーション・マニフェストの場所や、ClickOnceアプリの発行バージョン、各種オプション(例えば更新タイミング)などの情報が記述される。具体的には次のような情報である。

XML要素名 指定する内容
<assemblyIdentity>要素 ClickOnceアプリのアセンブリ名や配置バージョン、アセンブリの言語コード(多言語対応アプリケーションの場合)など、ClickOnceで展開する際に必要となるプライマリ・アセンブリに関する情報(ただしいずれも配置用の情報で、実際にアセンブリに含まれている情報と異なる場合がある。例えば配置バージョンは、ClickOnceでバージョンを管理するためのもので、正式なアセンブリ・バージョンとは異なる)
<description>要素 発行者名(=基本的には会社名)や製品名、サポートURL(=製品のサポート情報を掲載しているWebサイトのURL)など、ユーザーへの表示やコントロール・パネルの[プログラムの追加と削除]での項目名などで、ClickOnceが使用するアプリケーション情報
<deployment>要素 ClickOnceで配置するアプリケーションのインストール・モード(インストールするか、ネットワークから起動するか)などの配置オプションに関する情報。また、更新タイミングや更新の場所など、更新オプションに関する情報。そのほか、「URLからアプリケーションを実行するのを禁止するか(=URLからのインストールのみを許可するか)」「配置されるアプリケーションのすべてのファイルに“.deploy”という拡張子を付加しているか」「URLに指定されたパラメータをコマンドライン引数としてアプリケーションに渡すことを許可するか」など、細かなオプションに関する情報
<dependency>要素 アプリケーション・マニフェストの場所やインストールする実行ファイルのアセンブリ・バージョンなど、依存関係に関する情報
<publisherIdentity>要素 電子署名のシグネチャなど、発行者自体に関する情報
配置マニフェストに指定される内容
配置マニフェストはトップ要素として<assembly>要素があり、その中にこのようなさまざまな配置の要件を定義する要素が含まれている。より詳しくはMSDNの「ClickOnce 配置マニフェスト」を参照してほしい。

 配置マニフェストの命名規則は「<アセンブリ名>.application」で、本稿の例では「SampleApplication.application」となる。また各バージョンのバックアップとして「<アセンブリ名>_<発行するバージョン>.application」(本稿の例では「SampleApplication_1_0_0_0.application」)という名前のファイルも生成される。

●アプリケーション・マニフェスト(.manifestファイル)

 アプリケーション・マニフェストには、ClickOnceアプリを実行するうえで必要となるセキュリティ要件や依存関係などの情報が記述される。具体的には次のような情報である。

XML要素名 指定する内容
<assemblyIdentity>要素 ClickOnceアプリのアセンブリ名や配置バージョン、アセンブリの言語コード(多言語対応アプリケーションの場合)など、ClickOnceで展開する際に必要となるプライマリ・アセンブリに関する情報(ただしいずれも配置用の情報で、実際にアセンブリに含まれている情報と異なる場合がある。例えば配置バージョンは、ClickOnceでバージョンを管理するためのもので、正式なアセンブリ・バージョンとは異なる)
<entryPoint>要素 正式なアセンブリ名とアセンブリ・バージョンなど、アプリケーション実行のエントリ・ポイントに関する情報
<trustInfo>要素 アプリケーション実行で要求されるアクセス許可セット(PermissionSet)など、セキュリティ要件に関する情報
<dependency>要素 アプリケーション実行で最低限必要となるOSバージョン(デフォルトではWindows 98を意味するバージョン「4.10」が指定される)や、事前にもしくは後から追加でインストールされるアセンブリなど、依存関係に関する情報
<file>要素 アプリケーションで使用するアプリケーション構成ファイル(<アセンブリ名>.exe.configファイル)やCOM(Component Object Model)コンポーネントなど、アセンブリ以外のファイルに関する情報
<publisherIdentity>要素 電子署名のシグネチャなど、発行者自体に関する情報
アプリケーション・マニフェストに指定される内容
アプリケーション・マニフェストはトップ要素として<assembly>要素があり、その中にこのようなさまざまなアプリケーションの要件を定義する要素が含まれている。より詳しくはMSDNの「ClickOnce アプリケーション マニフェスト」を参照してほしい。

 アプリケーション・マニフェストの命名規則は「<アセンブリ名>.exe.manifest」で、本稿の例では「SampleApplication.exe.manifest」となる。


 今回はClickOnceの動作原理についてシステム管理者およびプログラマーの視点で解説した。その基本的な特徴についてご理解いただけただろうか。

 さて次回は、冒頭で示した目次の「第3回 ClickOnceの開発・運用の実際」というタイトルのとおり、ClickOnceを実際に活用していくときの開発手順や注意点、また実運用の手順やポイントを具体的に解説していく予定だ。お楽しみに。

「連載 ClickOnceの真実」のインデックス

連載 ClickOnceの真実

前のページへ 1|2       

Copyright© 1999-2018 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。