更新日: 2010 年 5 月 17 日

Visual Basic の内容はこちらに掲載しています。プログラムの自動配布と更新 (ClickOnce) (VB)

このコンテンツのポイント

  • ClickOnce の使用方法
  • コードによる ClickOnce の実装方法

今回紹介するコード

C#
1  using System.Deployment.Application;

2  private void button1_Click(object sender, RoutedEventArgs e)
   {
      // ClickOnce でインストールされたか確認
3     if (!ApplicationDeployment.IsNetworkDeployed)
       {
4          MessageBox.Show("ClickOnce を使用していません。");
           return;
       }
       // 強制的にアップグレード
5      ApplicationDeployment deploy;
6      deploy = ApplicationDeployment.CurrentDeployment;
7      deploy.Update();//アップグレードの実行
8      MessageBox.Show("更新終了。再起動します。");
9      System.Windows.Forms.Application.Restart();
10     Application.Current.Shutdown();  
   }

11 private void Window_Loaded(object sender, RoutedEventArgs e)
   {
       // ClickOnce でインストールされていた場合、バージョン表示
12     if (ApplicationDeployment.IsNetworkDeployed)
       {
           // 現在のバージョンをタイトルバーに表示する
13         ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment;
14         this.Title = deploy.CurrentVersion.ToString();
       }
   }
 

目次

  1. はじめに
  2. アプリケーションの準備
  3. 画面をデザインする
  4. コードを実装する
  5. テスト実行する
  6. いよいよ ClickOnce へ
  7. いよいよ ClickOnce の実行
  8. より高度な ClickOnce 開発へ
  9. おわりに

1. はじめに

.NET Framework 2.0 で導入された ClickOnce を用いると、リッチ クライアントの配布を中央のサーバーから簡単に行えます。Visual Studio は、リッチ クライアントを効率よく作成できる開発環境だけでなく、ClickOnce の構成を簡単に行える「発行ウィザード」も提供しています。また、.NET Framework のクラス ライブラリを使用すると、プログラムから ClickOnce の制御を行うことができます。

では、これらの例を簡単に見ていくことにしましょう。


2. アプリケーションの準備

Visual Studio を起動して、新規にプロジェクトを作成します。

ここでは、プロジェクトの種類ペインで [Visual C#] を選択し、テンプレート ペインでは [WPF アプリケーション] テンプレートを選択しています。[プロジェクト名] ボックスに適当な名称を入力し、[場所] ボックスに適当なパスを指定します。[OK] ボタンをクリックします (ここでのプロジェクト名は、WpfAppCS としています)。

これで WPF によるリッチ クライアント開発の準備が完了しました。

図 1. ClickOnce 用のアプリケーションのためのプロジェクトを新規に作成する

ページのトップへ


3. 画面をデザインする

フォームのデザインは、ドラッグ アンド ドロップ操作でビジュアルに作成することができます。

ここでは、配置の確認をすることが目的のため、以下のような簡単な画面を作成します。フォームにボタンを 1 つ貼り付け、ボタンの Content プロパティを「Update」に設定します。

図 2. 画面上に Button コントロールを配置する

ページのトップへ


4. コードを実装する

コントロールの配置が済んだので、アプリケーションとして必要になるコードを記述します。

ここでは、Windows1.xaml.cs の上部にある他の using ディレクティブの下に、以下に示す using ディレクティブを追加するほか、ボタンの Click イベント ハンドラーと、フォームの Load イベント ハンドラーを実装します。

今回のコードではあらかじめ次のアセンブリへの参照を追加しておく必要があります。

System.Deplyment.Application
Syste.Windows.Forms

これらの参照を追加するには[ソリューション エクスプローラー] 上で、プロジェクトを WpfAppCS を右クリックし、[参照の追加] をクリックします。[.NET] タブを選択し、コンポーネント名から上記 2 つを選択し、[OK] をクリックします。

まずは using ディレクティブを追加します。

C#
using System.Deployment.Application;
 

WPF デザイナー上で、ボタンをダブルクリックすれば、Click イベント ハンドラーの雛形が自動生成されます。また、フォーム デザイナー上で、フォーム自体をダブルクリックすると、Load イベント ハンドラーの雛形が作成されます。

このコードの主な内容は、System.Deployment.Application 名前空間にある ApplicationDeployment クラスを使って、ClickOnce に関する情報参照や、ClickOnce の制御です。後ほど、動作を確認しながら、ポイントを説明します。

C#
private void button1_Click(object sender, RoutedEventArgs e)
{
    // ClickOnce でインストールされたか確認
    if (!ApplicationDeployment.IsNetworkDeployed)
    {
        MessageBox.Show("ClickOnce を使用していません。");
        return;
    }
    // 強制的にアップグレード
    ApplicationDeployment deploy;
    deploy = ApplicationDeployment.CurrentDeployment;
    deploy.Update();//アップグレードの実行
    MessageBox.Show("更新終了。再起動します。");
    System.Windows.Forms.Application.Restart();
    Application.Current.Shutdown();
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    // ClickOnce でインストールされていた場合、バージョン表示
    if (ApplicationDeployment.IsNetworkDeployed)
    {
        // 現在のバージョンをタイトルバーに表示する
        ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment;
        this.Title = deploy.CurrentVersion.ToString();
    }
}
 

ページのトップへ


5. テスト実行する

まずは、ローカルに実行してみましょう。

アプリケーションを実行させるには [F5] キーを押すか、[デバッグ] メニューから [開始] をクリックします。すると自動的にコードがコンパイルされてアプリケーションが起動します。このサンプル アプリケーションを実行すると図 3 のように表示されます。

図 3. アプリケーションを実行する

起動の際に Load イベントが発生し、冒頭のソース コードの行番号 12 が実行されます。この記述は、ClickOnce でインストールされたかを調べる記述です。今回は、ローカルで実行しているので、この条件は false になり、行番号 13 以降は実行されません。行番号 13 以降は、ClickOnce によるインストールのバージョンを調べ、フォームのタイトル バーに表示します。今回は、既定の「Window1」というタイトルが表示されています。

実際の ClickOnce の運用時には、このような処理は必須ではありませんが、クラス ライブラリから ClickOnce の状況を確認できるということが分かるでしょう。

また、[Update] ボタンをクリックすると図 4. のように表示されます。この場合、ソース コードの行番号 3 に記述された条件式によって、同様に ClickOnce インストールを行ったかチェックし、そうではなければ、行番号 4 のメッセージ ボックスを表示します。

図 4. ボタンをクリックして、コードが実行されたことを確認する

確認が済んだら、メッセージ ボックスを閉じて、アプリケーションを終了します。

ページのトップへ


6. いよいよ ClickOnce へ

ClickOnce では、配布対象のソフトウェアと、マニフェストと呼ばれる XML 形式の構成ファイルを、サーバー上の決められたディレクトリ階層で置く必要があります。

Visual Studio の発行ウィザードを使うと、これら一連の作業を自動的に行ってくれます。ここでは、発行ウィザードを使って、配置に必要なファイルをサーバー上に構成します。

ソリューション エクスプローラー上で、[WpfAppCS] プロジェクトを右クリックし、[発行] メニューをクリックします。すると、発行ウィザードが起動して、以下の画面になります。

図 5. 発行ウィザード

ここで指定する URL 上にソフトウェアが置かれます。既定の URL のままにして、[次へ] ボタンを押します。ここでは、ローカルの IIS サーバーに配置しますので、http://localhost/WpfAppCS/ とし、[次へ] ボタンを押します。すると、インストール後にオフラインの実行を可能にするかどうかを問うオプションが表示されます。ここでは、既定のままにして、オフラ インの実行を可能になるようにします。

図 6. オフライン実行を可能にするかどうかの設定を行う

[次へ] ボタンを押すと、以下のように確認画面が表示されるので、[完了] ボタンを押して、ClickOnce の構成を開始します。

図 7. ClickOnce 構成の確認

処理が完了すると、既定では、以下のように ClickOnce による配置を行うことができる Publish.htm という Web ページが開きます。通常の利用者は、このページから、[インストール] ボタンをクリックしてインストールすることになります。もちろん、一般ユーザーは発行ウィザードを実行して、このページを開くわけではなく、このページの URL に Web ブラウザーからアクセスすることになります。

この Web ページを開いたままにして、次に進みます。

図 8. ClickOnce による配置を行う Web ページ

ページのトップへ


7. いよいよ ClickOnce の実行

いよいよ ClickOnce での実行です。図 8 の Web ページから、[インストール] ボタンをクリックします。ClickOnce によるインストールが開始します。なお、このあとのインストールの一連の手順は、クライアント側で行われるものであり、クライアントには、あらかじめ .NET Framework が必要になります。

今回のインストールでは、次の警告画面が表示されます。このアプリケーションは、信頼された発行者が署名したものではないからです。今回は実験なので、そのまま [インストール] ボタンを押して続行します。

図 9. ソフトウェアの発行者の署名が信頼できないため警告画面が出る

そうすると、アプリケーションがダウンロードされ、インストールされます。その後、実行されて、次のフォームが表示されます。

図 10. 無事にインストールされて実行される

今度は、ソース コードの行番号 14 のところが実行され、バージョン番号がタイトル バーに表示されています。なお、既定では、「1.0.0.0」が割り振られています。このバージョン番号は、プログラム ファイル (つまり、アセンブリ) のバージョンではなく、ClickOnce の構成を行ったパッケージ単位のバージョンです。

ここで、このフォームを閉じて、プログラムを終了します。

ページのトップへ

8. より高度な ClickOnce 開発へ

今回は、オフライン実行が可能になるよう構成しました。この場合、一種のローカル インストールに似た状態になり、スタート メニューなどのクライアント環境も自動構成されます。既定では、[スタート] - [すべてのプログラム] - [組織名] - [WpfAppCS] というメニューがあるはずです。

今度は、スタート メニューから起動しましょう。すると、既定構成では起動時にサーバーへのアクセスが試みられ、アップグレード版がないか、チェックされます。チェック後、アプリケーションが起動します。

図 11. 起動時にサーバーのアクセスを試みる

以上、ClickOnce の基本構成を見てきました。この後の運用では、サーバーをアップグレードすると、クライアントは次回起動時に、サーバーからアップグレード版をダウンロードします。また、構成によっては、アプリケーション起動時に、バックグラウンドで、サーバーにアクセスし、アップグレードの有無をチェックすることもできます。

また、プログラム上から、ClickOnce の制御もできます。このアプリケーションには、Click イベント ハンドラーにその記述があるので、以下の手順で実験してみましょう。

まず、アプリケーションを起動したままにして、Visual Studio から再び発行ウィザードを起動して、前回と同様にサーバーへアプリケーションを置きます。既定では、自動的に ClickOnce のパッケージは、バージョンが上がり、1.0.0.1 になります。

発行ウィザードの処理が済んだら、Publish.htm は何もせずに閉じます。

そして、起動中のアプリケーションの [Upadate] ボタンを押します。ソース コードの行番号 3 ~ 5 が実行され、アップグレードが行われます。実際のアップグレードは、行番号 5 の Update メソッド呼び出しです。

アップグレードが終了すると、行番号 8 のメッセージボックスが表示されます。

図 12. アップグレード完了

ここで、[OK] ボタンを押すと、行番号 9,10 が実行され、アプリケーションは再起動されます。

すると、バージョン番号が更新されたタイトル バーを持つ、フォームが表示されます。

図 13. バージョンが 1.0.0.1 になる

フォームを閉じて、アプリケーションを終了します。

なお、このアプリケーションをアンインストールするには、コントロール パネルの [プログラムの追加と削除] から、該当するアプリケーション (ここでは、WpfAppCS) をアンインストールしてください。

ページのトップへ


9. おわりに

本稿では、ClickOnce を利用した WPF クライアントの開発のための手順と配布手順を見てきました。

ClickOnce を使用すれば、アプリケーションの配置を簡単に行うことができます。しかも、Visual Studio の発行ウィザードを使うと、サーバーの構成を簡単に行うことができます。また、System.Deployment.Application 名前空間のクラス ライブラリを利用すると、プログラムから ClickOnce の制御ができます。

関連するコンテンツなどを参考にしながら、ぜひ、ClickOnce でのアプリケーションの配置にチャレンジしてみてください。


Code Recipe .NET Framework デベロッパー センター

ページのトップへ