最終更新日 2005 年 11 月 1 日

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

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

今回紹介するコード

Visual Basic
Imports System.Deployment.Application

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button1.Click
        ' ClickOnce でインストールされたか確認
        If Not ApplicationDeployment.IsNetworkDeployed Then
            MessageBox.Show("ClickOnce を使用していません。")
            Return
        End If
        '強制的にアップグレード
        Dim deploy As ApplicationDeployment
        deploy = ApplicationDeployment.CurrentDeployment
        deploy.Update() 'アップグレードの実行
        MessageBox.Show("更新終了。再起動します。")
        Application.Restart()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, _
                           ByVal e As System.EventArgs) Handles MyBase.Load
        ' ClickOnce でインストールされていた場合、バージョン表示
        If ApplicationDeployment.IsNetworkDeployed Then
            ' 現在のバージョンをタイトルバーに表示する
            Dim deploy As ApplicationDeployment _
                        = ApplicationDeployment.CurrentDeployment
            Me.Text = deploy.CurrentVersion.ToString()
        End If
    End Sub
End Class
 

今回のシステム要件

  • Visual Studio 2005 Beta 2
  • Internet Information Service 5.x または 6.0

目次

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

C# の内容はこちらに掲載しています。
10 行でズバリ !! ClickOnce (C#)

 


はじめに

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

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

アプリケーションの準備

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

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

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

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

画面をデザインする

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

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

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

コードを実装する

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

ここでは、Form1.vb の上部の Form1 クラス ブロックよりも上に、以下に示す Imports ステートメントを追加するほか、ボタンの Click イベント ハンドラと、フォームの Load イベントハンドラを実装します。

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

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

Visual Basic
Imports System.Deployment.Application

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button1.Click
        ' ClickOnce でインストールされたか確認
        If Not ApplicationDeployment.IsNetworkDeployed Then
            MessageBox.Show("ClickOnce を使用していません。")
            Return
        End If
        '強制的にアップグレード
        Dim deploy As ApplicationDeployment
        deploy = ApplicationDeployment.CurrentDeployment
        deploy.Update()'アップグレードの実行
        MessageBox.Show("更新終了。再起動します。")
        Application.Restart()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, _
                           ByVal e As System.EventArgs) Handles MyBase.Load
        ' ClickOnce でインストールされていた場合、バージョン表示
        If ApplicationDeployment.IsNetworkDeployed Then
            ' 現在のバージョンをタイトルバーに表示する
            Dim deploy As ApplicationDeployment _
                        = ApplicationDeployment.CurrentDeployment
            Me.Text = deploy.CurrentVersion.ToString()
        End If
    End Sub
End Class
 

テスト実行する

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

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

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

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

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

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

 

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

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

いよいよ ClickOnce へ

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

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

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

図 5. 発行ウィザード

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

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

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

図 7. ClickOnce 構成の確認

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

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

 

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

いよいよ ClickOnce の実行

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

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

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

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

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

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

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

より高度な ClickOnce 開発へ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

おわりに

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

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

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


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

ページのトップへ