ClickOnce 機能を使用して Windows フォーム アプリケーションを展開する
Mauro Sant'Anna Microsoft Regional Director
December 2004
日本語版最終更新日 2005 年 2 月 24 日
要約: ClickOnce 技術の概要とその他の展開技術との比較、および ClickOnce 技術をアプリケーションで使用する方法について説明します。この記事には英語のページへのリンクも含まれています。
はじめに
ClickOnce は Visual Studio 2005 に付属している Windows フォームの新しい展開技術で、アプリケーションのインストールや、スマート クライアントを使った Web アプリケーションのアップグレードを簡素化します。.NET Framework の初バージョンから利用されている HTTP を介した Windows フォーム アプリケーションの展開は、その後発展し続けてきました。この記事では、Windows フォーム アプリケーションの利点と、ClickOnce 技術に至るまでの発展過程について説明します。また、公開された Visual Studio 2005 Beta 1 バージョンを使った簡単な例も挙げます。
Windows フォームの利点
World Wide Web が登場して以来、ユーザーや開発者たちの関心は "いわゆる" Windows アプリケーションから Web アプリケーションへと移行していきました。その "クールな様相" に加え、Web アプリケーションには次の際立つ特長があります。
- Web アプリケーションはインターネット接続が利用できれば世界中どこからでもアクセスできます。クライアント マシンで Windows を稼動している必要はありません。"純粋な Web" アプリケーション技術は、あらゆる場所からのアクセスを必要とするアプリケーションに向いています。
- Web アプリケーションの展開および更新は簡単です。Web サーバーのディレクトリにアプリケーション ファイルをコピーするだけで、すべてのクライアント マシンで新しいアプリケーションをすぐに使用できます。厄介な DLL も、絡み合ったレジストリ エントリも、COM クラスの登録も、必要ありません。
これらの 2 つの特長のうち、この記事では 2 番目の展開機能について詳しく説明します。Web アプリケーションで使用される HTTP プロトコルは、従来の Windows アプリケーション展開と比較していくつもの利点があります。
ところが一方、Web アプリケーションのユーザー側の操作性は優れているとは言えません。Windows アプリケーションと比較すると、Web アプリケーションには次の不利な点があります。
- ユーザー インターフェイスが充実していない。Windows アプリケーションでは当然のように使用されているドラッグ アンド ドロップやマウスの右クリック機能などは、Web アプリケーションで実現するのは非常に難しく、不可能な場合もあります。
- リッチ インターフェイスの技法を何とか使用しようとしても、それには通常、記述とデバッグが困難な膨大な数のクライアント スクリプトが必要になります。
- Web アプリケーションは多くのサーバー リソースおよび帯域幅を使用します。また、サーバーとの通信時間によるユーザーの待ち時間が発生します。
- Web アプリケーションでの印刷は、"画面を印刷する" ので、改ページやフォント、余白、用紙のサイズなどの設定が限られています。
- 上に挙げた問題の一部はプラグインまたは ActiveX コントロールを使用することによってある程度解決されますが、その代わり、従来の非 Web アプリケーションの持つ展開に関する問題が発生します。
では、Web アプリケーションの配布の容易さと、Windows アプリケーションのクライアント側の豊富な機能性を 1 つにできないものでしょうか。そこで登場したのが .NET Framework です。.NET Framework はその初バージョンから、通常の問題なく、HTTP を介した Windows フォーム アプリケーションの配布をサポートしてきました。
この種類のアプリケーションは、特に、あらゆる場所からのアクセスが要求されず、エンド ユーザーのコンピュータに Internet Explorer と .NET Framework の両方がインストールされていることを前提にできる、イントラネットやエクストラネットのシナリオで関心が寄せられます。
.NET Framework 1.x: HREF タグを使用した実行ファイルの起動
.NET Framework のバージョン 1.0 および 1.1 には、"既定の設定" で HTTP を介して Windows フォーム アプリケーションを展開できる機能が備わっていました。基本的に、"HREF" タグを使ってマネージ .EXE をポイントすればよかったのです。Internet Explorer および .NET Framework のランタイムは、実行ファイルだけでなく、必要に応じて DLL もオン デマンドでダウンロードおよび実行できます。このような展開は "HREF タグを使用した実行ファイルの起動" と呼ばれています。
たとえば、次のように使用します。 <a href="MainProject.exe">Call MainProject</a>
この方法はとても簡単で、次の推奨記事でも説明されています。
.NET アセンブリ (.EXE または .DLL) が展開の基本単位なので、アプリケーションをメインの .EXE と複数の DLL に分割する必要があります。そうすると、1 つの DLL を変更した場合、変更した DLL をダウンロードするだけで済みます。
方法は簡単ですが、正しく機能するにはいくつかの注意点があります。
- クライアント マシンに .NET Framework が既にインストールされている必要があります (http://www.microsoft.com/japan/msdn/vstudio/downloads/bootstrapper/ からプラグインをダウンロードすると .NET Framework およびアプリケーションのインストールが簡単になります)。
- アプリケーションは部分的に信頼されたコードとしてクライアント側で稼動します。ある意味では、アプリケーションはサンドボックス型の環境で稼動し、クライアント コンピュータ側への制御は制限されるので、このことは利点のように見えます。ところが一方、ローカル ファイルを開いたり、COM オブジェクトを呼び出すといった機能が必要な場合、クライアント側でセキュリティ ポリシーを設定する必要があります。これは容易なことではありません。
- 既定では、実行ファイルが複数の DLL をローカライゼーション リソースと共に読み込もうとすることが予想され、実装に関する既知の問題により、特にインターネットの接続速度などの性能が低下することが考えられます。
- 更新はファイルごとに行われるので、たとえば更新ファイルが 10 個あれば、それがすべてダウンロードされるとは限りません。クライアント マシンは、"半分更新された" 状態でアプリケーションを実行することになりかねません。
- ユーザーが手動で Internet Explorer の [オフライン作業] を設定した場合にのみ、アプリケーションをオフラインで使用できます。アプリケーションからはこの設定はできません。
- 既定で、プログラムに関連する .config ファイルは使用できません (その方法については、ここをクリック
(英語) してください)。
- アプリケーションを起動するためのショートカットをデスクトップに作成したり、[スタート] メニューに含めることはできません。
Updater Application Block
上に挙げた問題に対応するため、Microsoft は Updater Application Block (UAB) (英語) を開発しました。アップデーター ブロックはアプリケーションに追加するライブラリで、HTTP を介したアプリケーション ピースのダウンロードを管理します。
従来の Framework 実装に比べ、UAB には次の利点があります。
- ローカル アプリケーションとして稼動し、性能が低下することなく常に利用が可能です。
- 更新が処理されます。つまり、新しいバージョンのファイルがすべてダウンロードされないと、新しいバージョンを使用できません。
- すべてのアプリケーション ファイルが明確にリストされます。
- 完全に信頼されたアプリケーションとして稼動します。クライアントのセキュリティ ポリシーを設定する必要はありません。
- [スタート] メニューからアプリケーションを起動できます。
一方、いくつかの不利な点もあります。
- UAB を使用するには、アプリケーションを大幅に変更する必要があります。
- BITS を使用してアプリケーション ピースをダウンロードするので、Windows 98/ME では稼動しません。Windows 2000 以降が必要です。
- 完全に信頼されたローカル アプリケーションとして稼動するので、コード アクセス セキュリティは確保されません。
- Microsoft でサポートされていません。
UAB の詳細については、Jamie Cool の「.NET Application Updater Component (英語)」を参照してください。その他にも、Got Dot Net のサイト「the home of the UAB (英語)」をご覧ください。UAB は "公式" にはサポートされていませんが、http://www.gotdotnet.com/ (英語) のフォーラムも参考になります。いずれにせよ、UAB には完全なソース コードが提供されるので、ソース コードを書き換えて、BITS と Windows 2000 などの要件を変更することができます。
ClickOnce
UAB は Microsoft が最終的なソリューションを開発する過程において使用されていた方法であることは明確です。その最終的なソリューションが ClickOnce です。基本的に、ClickOnce には UAB での問題がほとんど解決され、UAB の持つすべての利点が備わっており、さらに機能が追加されています。私の意見としては、ClickOnce の主な利点の 1 つは、コード アクセス セキュリティを復元することです。
HREF タグを使用した実行ファイルの起動方法と比較すると、ClickOnce アプリケーションには次の利点があります。
- 更新が処理されます (つまり、更新が完全に完了するか、まったく更新されません)。
- アプリケーションはオフラインで実行できるだけでなく、アプリケーションを広範囲に制御できます。API によってアプリケーションはオンラインであるかオフラインであるかを認識したり、アプリケーションの更新プロセスを制御したりできます。
- Visual Studio .NET と統合して適切な予備ファイルやツールを生成し、アプリケーションを実行するにはどのセキュリティ権限が必要かを識別します。
- Win32 "ブートストラッパ" 実行ファイルを使って、.NET Framework を含め、必要なコンポーネントをダウンロードできます。
- アプリケーション ファイルをオンデマンドまたはバッチでダウンロードできます。
- [スタート] メニュー ショートカットを使用できます。
ClickOnce は、旧コードネーム "Whidbey" で知られていた Visual Studio 2005、および .NET Framework 2.0 の機能の一部です。"Community Preview Beta 1" (Framework バージョン 2.0.40607) の例を見てみましょう。
ClickOnce アプリケーション
次の手順に従って、簡単な ClickOnce アプリケーションを作成します。
- Visual Studio 2005 を起動します。
- [ファイル] を選択し、[新しいプロジェクト] をクリックします。
- 言語 (C# または Visual Basic .NET) を選択し、[Windows アプリケーション] を選択します。
- プロジェクトに「
MyClickOnceApp」という名前を付け、[OK] をクリックします。
- フォームにボタンを追加し、[テキスト] プロパティを [バージョン情報] に変更します。
- ボタンをダブルクリックします。コード ウィンドウに次のコードを入力します。
Visual Basic .NET の場合: MsgBox("My First ClickOnce Application")
C# の場合: MessageBox.Show("My First ClickOnce Application");
F5 キーを押し、アプリケーションを実行してテストします。
Visual Studio 2005 で作成したすべての Windows アプリケーションでは、[プロジェクト]、[MyClickOnceApp のプロパティ] の順に選択し、[発行] ページで展開の詳細を設定できます。

図 1. 発行の詳細設定
[発行場所] はアプリケーションの展開元を示します。Web サーバー (HTTP) 上の場所であったり (上の図を参照)、通常のネットワーク パスであったりします。
[インストール モードと設定] で次の展開の詳細設定を行います。
- アプリケーションをオンラインで使用するか、オフラインでも使用できるようにするかの設定。
- [アプリケーション ファイル]: 個々のファイルをインストールするかどうかの設定。
- [必須コンポーネント]: セットアップ プログラムが、Windows Installer 2.0、.NET Framework 2.0、J# Redistributable Package、SQL Server 2005 Express、Crystal Reports、Microsoft Data Access Components 2.8 などのコンポーネントをインストールする必要があるかどうかの設定。
図 2. 必須コンポーネントの設定
- [アプリケーションの更新]: アプリケーションが更新の有無をいつチェックするか、およびクライアント側のダウンロード場所の設定。
図 3. 更新の設定
- [発行オプション]: アプリケーション言語、[スタート] メニュー ショートカットのリソース名、Web 展開に使用する HTML ページ、および展開ポリシー チケットなどの詳細設定。
図 4. 発行オプションの設定
[発行するバージョン] ではアプリケーションのバージョン番号を調整します。バージョン番号は展開ごとに自動的に増えていくように設定できます。
[発行ウィザード] ではさまざまな発行オプションを設定します。このウィザードは [ビルド] メニューの [発行] コマンドを選択して起動できます。すべての ClickOnce アプリケーションは暗号で署名されている必要があり、ウィザードは既存の鍵 (推奨) を求めます。または、新しい鍵を作成することもできます。

図 5. アプリケーションの署名
ウィザードを 1 度実行した後、[今すぐ発行] をクリックして更新を発行します。ここの例では Web ページが表示されます。

図 6. 発行後のアプリケーション
この Web ページには、アプリケーションをインストールする前に、どの必須コンポーネント パッケージをインストールする必要があるかをチェックするスクリプトが含まれています。必須コンポーネントがインストールされていない場合、アプリケーションを最初に実行したときにインストールされます。
アプリケーションを最初に実行したとき、ユーザーが [インストール] リンクをクリックすると、次のダイアログ ボックスが表示されます。
- Windows XP SP2 警告
- ソフトウェア ライセンス使用許諾書
- 発行元の署名未承認
展開の詳細
Visual Studio .NET 2005 はアプリケーション ファイルとフォルダ用の新しい Web を作成します。

図 7. 展開フォルダ
dotnetfx フォルダには .NET Framework の再配布可能ファイルが含まれています。現在は 25 MB の実行ファイルです。
既定で、アプリケーションを展開するごとに、Visual Studio はバージョン番号を増やします。各バージョンに対して、それに対応するバージョン番号の付いた新しいフォルダが作成されます。
.application ファイルは、HTML ページ "publish.htm" に表示されているリンクのリンク先です。.application ファイルは、アプリケーションの現在のバージョンに対応するフォルダやデジタル署名などの情報を含む XML ファイルです。
publish.htm は Web ページです。ここには、.application ファイルへのリンクだけでなく、クライアント スクリプトへのリンクも含まれています。クライアント スクリプトはバージョンのチェックを行い、結果のメッセージを表示します。たとえば、ご使用のコンピュータに .NET Framework がインストールされていない場合、[MyClickOnceApp のインストール] に異なるメッセージが表示されます。
Setup.exe は Win32 実行ファイルです。アプリケーションをインストールするだけでなく、.NET Framework および MDAC 2.8 などの必須コンポーネントを正しい順にインストールします。
各アプリケーション フォルダには、アプリケーションのファイルおよびマニフェスト ファイルが含まれています。マニフェストは XML ファイルで、次の情報が含まれています。
- すべてのアプリケーション ファイルについての詳細な情報。これにはファイル名、バージョン番号、カルチャ、およびプロセッサのアーキテクチャ (この例では "msil") 情報が含まれます。
- アプリケーションに必要なすべての権限。
- デジタル署名。
アプリケーションの実行
アプリケーションをダウンロードした後、アプリケーションを実行するのに、再度ダウンロードする必要はありません。ここの例では、Web ページへのリンクをクリックするか、[スタート] メニューのショートカットを選択して、アプリケーションを起動できます。いずれの場合も、[アプリケーションの更新] プロジェクト オプションの設定に従って、新しいバージョンの存在がチェックされます。必要に応じて、新しいバージョンがダウンロードされます。
この更新機能をチェックするには、次の操作を行います。
- アプリケーションでフォーム上のボタンの位置を変えるなど、目に見える変更をします。
- ビルドしてもう一度展開します。
- アプリケーションを実行し、ダウンロード プロセスをチェックします。
最後になりましたが、この情報は Visual Studio .NET Beta 1 バージョンに基づいていることにご注意ください。これより新しいバージョンでは機能が異なるかもしれません。
比較表
| |
HREF タグを使用した実行ファイルの起動 |
UAB |
ClickOnce |
| アプリケーションへの変更が不要 |
X |
|
X |
| アプリケーションを単独で使用 |
X |
|
X |
| 完全にサポートされている |
X |
|
X |
| システムへの負荷が少ない |
X |
|
X |
| コード アクセス セキュリティの保持 |
X |
|
X |
| ファイルをオンデマンドでダウンロード |
X |
|
X |
| マニフェストで必須ファイルをリストに記述 |
|
X |
X |
| 暗号で署名されたマニフェスト |
|
|
X |
| ファイルをバッチでダウンロード |
|
X |
X |
| オフラインで作業 |
(*) |
X |
X |
| インストールの処理 |
|
X |
X |
| 最適な性能 |
|
X |
X |
| Windows 2000 以降が要件 |
|
X |
(**) |
| Windows シェル統合 |
|
X |
X |
| 更新プロセスの詳細な制御 |
|
X |
X |
| オフライン作業およびダウンロード プロセスを制御するための API |
|
|
X |
| オプション パッケージの自動インストール |
|
|
X |
(*) ユーザーによる操作が必要
(**) ベータ版なので不明
まとめ
ClickOnce はアプリケーション展開のための非常に強力なテクノロジです。これは、以前からある展開モデルの自然な革新の結果であり、Windows フォーム アプリケーションのリッチ クライアント操作性に堅牢性、安全性、性能、そして柔軟性を包括して提供します。
著者について
Mauro Sant'Anna (mas_mauro@hotmail.com) は Microsoft Regional Director、MCSD、MCSE、開発者、およびトレーニング担当者です。彼は .NET が オーランドで開かれた PDC 2000 で初めて紹介されたとき "真っ先に" その実用性を確信しました。
|