連載
|
![]() |
|
|
|
●ダウンロード・グループ単位でオンデマンド配置するコード
具体的には、ApplicationDeploymentクラス(System.Deployment.Application名前空間)が持つDownloadFileGroupメソッドを、先ほど設定したグループ名である「SampleClassLibraryGroup」という文字列をパラメータに指定して呼び出すだけだ。
なお、ClickOnceの動作をカスタマイズするプログラミングでは、基本的にこのApplicationDeploymentクラスのメソッドやプロパティを使う仕様となっている。現在実行中のClickOnceアプリのApplicationDeploymentオブジェクトは、ApplicationDeploymentクラスの静的プロパティであるCurrentDeploymentにより取得できる。
以上のプログラミングを行ったのが、次のコードである(C#の場合。VBのコードは割愛する)。
|
|
| オンデマンド配置を行うコード |
上記のコードのMyDownloadFileGroupメソッドは、パラメータにダウンロード・グループ名(groupName変数)を受け取る。
このメソッドの内部で最初に実行されている「ApplicationDeployment.IsNetworkDeployed」という静的プロパティは、現在実行中のアプリケーションがClickOnceで配布されたものかどうかをTrue/Falseで取得するためのものだ。当然ながら、ClickOnceで配布されたアプリケーション以外でCurrentDeploymentプロパティを呼び出すと例外が発生するため、事前にこのようなチェックが必要になる。
次にCurrentDeploymentプロパティからApplicationDeploymentオブジェクトを取得し、そのIsFileGroupDownloadedメソッドをパラメータにグループ名を引き渡して呼び出している。このメソッドは、そのグループ名のダウンロード・グループのファイル群がすでにダウンロード済みかどうかをTrue/Falseで返すためのものだ。
このメソッドで、まだダウンロードが済んでいことが分かればDownloadFileGroupメソッドを呼び出すというロジックになっている。DownloadFileGroupメソッドは、繰り返しになるが、オンデマンドで指定したダウンロード・グループのファイル群をダウンロードするためのものだ。
●ダウンロードの進ちょく状況を表すダイアログの表示
しかし上記のコードには1つ問題がある。DownloadFileGroupメソッドは同期メソッドであるため、その実行中はアプリケーションのユーザー・インターフェイスが固まったようになってしまうのだ。ダウンロードするファイル・サイズが大きい場合はアプリケーションが反応しない時間が長くなってしまうので特に問題になるだろう。これを防ぐには非同期メソッドのDownloadFileGroupAsyncを呼び出す必要がある(その具体的な活用方法は本稿では割愛する)。
また、非同期でダウンロードを行う際に、ダウンロードの進ちょく状況をダイアログで表示してあげると、ユーザーに対して親切だろう。このようなダイアログ(以降、ダウンロード・ダイアログ)を表示する機能は、残念ながら.NET Framework 2.0のクラス・ライブラリでは提供されていないため、ClickOnceのオンデマンド配置を実装したい開発者はそれぞれが独自に開発しなければならない。
本稿では汎用的に使えるダウンロード・ダイアログを開発し、これをクラス・ライブラリの形で提供しているので(前述の「ClickOnce」プロジェクト)、これを各開発者のプロジェクトでも(より洗練させるなど改変して)活用してもよい。
本稿で提供するダウンロード・ダイアログはClickOnceが提供するダイアログのルック&フィールを踏襲し、ほぼ同じユーザー・インターフェイスにデザインしている(タイトルバーの左にアイコンが表示されるなど若干の違いはある。リソース関連はSystem.Deployment.dllに含まれるものを動的に使用している)。
次の画面は、ダウンロード・ダイアログの実行例である。
![]() |
![]() |
| 本稿で提供するダウンロード・ダイアログの実行例 |
| タイトルバーの左にアイコンが表示されていることや、右に[最小化]ボタンが表示されていないことなど、若干の違いはあるものの、ClickOnceで提供されているユーザー・インターフェイスとほとんど同じデザインにしている。 |
オンデマンド配置を行う際に、ApplicationDeploymentクラスの代わりに、「ClickOnce」プロジェクト(DigitalAdvantage.ClickOnce.dllファイル)に含まれるClickOnceAppDeploymentクラス(DigitaAdvantage.ClickOnce名前空間)のDownloadFileGroupメソッドを使うと、その内部で非同期処理によってダウンロード・グループのファイル群をダウンロードしながら、その進ちょくをこのダウンロード・ダイアログで表示するようにしている。
ClickOnceAppDeploymentクラスのメソッドやプロパティは、ApplicationDeploymentクラスとほぼ同じであるが、いくつかのメソッドやプロパティを追加/削除している。例えば削除したメソッドには、非同期処理を行うXxxxxAsync系メソッドがある(DownloadFileGroupAsyncメソッドなど)。
次のコードは、実際にこのClickOnceAppDeploymentクラスのDownloadFileGroupメソッドを呼び出す例だ。
|
|
| ダウンロード・ダイアログを表示しながらオンデマンド配置を行うコード | |
| 先ほどのApplicationDeploymentクラスを活用したコードとほぼ同じ内容で、ダウンロード・ダイアログの表示が行える。変更もしくは追加した個所は太字にしている。 |
このコードを見れば分かるように、先ほどのApplicationDeploymentクラスを活用したコードとほぼ同じ内容である。違うのは、ClickOnceAppDeploymentオブジェクトを利用していることと、オンデマンド配置(やアップデート)を行った後、そのProcessingModeプロパティにより詳細な処理結果をProcessingMode列挙体(DigitaAdvantage.ClickOnce名前空間)の値として取得できることだ。
このProcessingMode列挙体の値の意味については次の表にまとめた。
| 値 | 意味 |
| NoAction | 何も実行していない状態 |
| Processing | 現在、処理を実行中 |
| Completed | 処理が完了し、成功した |
| Error | エラーが発生し、処理を中止した |
| Canceled | 処理がユーザーによりキャンセルされた |
| Skipped | (処理を実行する前に)ユーザーがアプリケーションのアップデートを(今回は)スキップした |
| ProcessingMode列挙体の値の意味 | |
| このうちSkippedの状態は、アプリケーションをアップデートしてよいかどうかをユーザーに確認するダイアログを表示し、そのダイアログの[スキップ]ボタンが押されたときのものである。この状態ではアプリケーションは実際にはアップデートされていない(詳細後述)。 | |
以上で、オンデマンドで(ダウンロード・グループで指定した).DLLファイルをダウンロードできるようになった。それでは、ダウンロードしたそれらのファイルに含まれる機能(例えばクラスなど)は、どのようにして使えばよいのだろうか。
| INDEX | ||
| ClickOnceの真実 | ||
| 第4回 ClickOnceテクノロジを最大限に生かす開発 | ||
| 1.オンデマンド配置のためのダウンロード・グループの作成 | ||
| 2.オンデマンド配置するコードと進ちょくダイアログの表示 | ||
| 3.ダウンロードしたアセンブリのロードとそこに含まれる機能の実行 | ||
| 4.任意のタイミングで実行するアップデート(手動による更新処理) | ||
| 「ClickOnceの真実」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
は.NET開発者中心に生まれ変わりました
スポンサーからのお知らせ
.NET開発者中心コーナー
- - PR -
イベントカレンダー
- - PR -




