SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Silverlight 3徹底入門

Silverlightのオフライン機能による新しい可能性

Silverlight 3徹底入門(4)

  • X ポスト
  • このエントリーをはてなブックマークに追加

アプリケーションのインストール

 ブラウザー外実行のアプリケーションをプログラムコードからインストールするためのAPIも用意されています。

 プログラムコードからアプリケーションのインストールやアップデートをするためにはApplicationクラスのInstallメソッドやCheckAndDownloadUpdateAsyncメソッドを利用します(ただし、アンインストール用のAPIは現在提供されていません)。

 リスト5はインストールボタンが押された時に、現在のSilverlightアプリケーションをブラウザー外実行で動作するようにインストールするイベントハンドラーです。

 まずは、インストールボタンがクリックされたときにInstall_Clickイベントハンドラーが呼び出されるようにXAML側を修正しましょう。

<Button Content="アプリケーションのインストール" Click="Install_Click" />

 ローカルコンピューターにインストールするためには、ApplicationクラスのInstallメソッドを利用します。ただし、既にインストールされている環境に再度インストールを行うとInvalidOperationExceptionの例外が発生するため、InstallStateプロパティーを調査して現在のインストール状況を確認する必要があります。

[リスト5]インストール
private void Install_Click(object sender, RoutedEventArgs e)
{
    if (Application.Current.InstallState == InstallState.NotInstalled)
        Application.Current.Install();
    else
        MessageBox.Show("既にインストールされています。");
}

 さっそく実行してアプリケーションインストールボタンをクリックすると、コンテキストメニューからアプリケーションのインストールを選択したときと同じように図4のダイアログが表示されたことを確認できると思います。

アプリケーションの更新

 続いてアプリケーションの更新プログラムを見ていきましょう。

 インストールと同様にアプリケーションの更新ボタンが押された時にUpdate_Clickイベントハンドラーが呼び出されるようにXAMLを修正します。

<Button Content="アプリケーションの更新" Click="Update_Click" />

 リスト6はアプリケーションの更新を行うコードです。

 インストールされたアプリケーションの更新状態をチェックし、アプリケーションを最新にするためには、ApplicationクラスのCheckAndDownloadUpdateAsyncメソッドを利用します。このメソッドは名前の通りアプリケーションの最新状態のチェックと更新を非同期で実行します。更新はアプリケーションの次回起動時に有効になります。

 更新自体は非同期で行われるため、CheckAndDownloadUpdateAsyncメソッドを実行する前に更新が終了した時に発生するCheckAndDownloadUpdateCompletedイベントのイベントハンドラーを登録しておく必要があります。

[リスト6]アプリケーションの更新
public MainPage()
{
    InitializeComponent();

    // 更新終了時のイベントハンドラーを登録
    Application.Current.CheckAndDownloadUpdateCompleted
                += Current_CheckAndDownloadUpdateCompleted;
}

private  void Update_Click(object sender, RoutedEventArgs e)
{
    Application.Current.CheckAndDownloadUpdateAsync();
}

private void Current_CheckAndDownloadUpdateCompleted
        (object sender, CheckAndDownloadUpdateCompletedEventArgs e)
{
    if (e.UpdateAvailable)
    {
        MessageBox.Show("正常に更新されました。再起動後に有効になります。");
    }
    else
    {
        if (e.Error == null)
            MessageBox.Show("現在のバージョンが最新です。");
        else
            MessageBox.Show(string.Format("更新に失敗しました。{0}",
                                          e.Error.ToString()));
    }
}

 アプリケーションの更新が終了すると(たとえ更新時にエラーが発生したとしても)アプリケーションの開始時に登録したCurrent_CheckAndDownloadUpdateCompletedイベントハンドラーが呼び出されます。

 このイベントハンドラーでは、アプリケーションの更新が正常に成功したかをCheckAndDownloadUpdateCompletedEventArgsクラスのUpdateAvailableプロパティを確認することでチェックすることができます。

 ここで注意したいのは、現在のアプリケーションが最新である場合はアプリケーションの更新自体は行われないため、UpdateAvailableプロパティはfalseをかえすということです。

 更新時にエラーが発生したかどうかを調べるためには、UpdateAvaliableプロパティのほかにErrorプロパティーも同様に調査する必要があります。

インストール状況の表示

 アプリケーションのインストール状況を調べるためには、ApplicationクラスのInstallStateプロパティを調査します。

 リスト7では、アプリケーションの開始時にInstallStateChangeイベントハンドラーを登録することで、アプリケーションのインストール状況が変更した際にテキストブロック状況を表示させるようにしています。

[リスト7]インストール状況の表示
public MainPage()
{
    InitializeComponent();

    // インストール状態の表示
    インストール状況の表示();
    Application.Current.InstallStateChanged
                += Current_InstallStateChanged;
    // 更新終了時のイベントハンドラーを登録
    Application.Current.CheckAndDownloadUpdateCompleted
                += Current_CheckAndDownloadUpdateCompleted;
}

private void Current_InstallStateChanged(object sender, EventArgs e)
{
    インストール状況の表示();
}

private void インストール状況の表示()
{
    switch (Application.Current.InstallState)
    {
        case InstallState.Installed:
            実行モード.Text = "インストール終了";
            break;
        case InstallState.Installing:
            実行モード.Text = "インストール中";
            break;
        case InstallState.InstallFailed:
            実行モード.Text = "インストール失敗";
            break;
        case InstallState.NotInstalled:
            実行モード.Text = "未インストール";
            break;
        default:
            実行モード.Text = "それ以外";
            break;
    }
}

 では、プログラムを実行して動作を確認してみましょう(図11)。

 アプリケーションインストールをクリックすると、実行モードが未インストール→インストール中→インストール完了と変化し、インストールされたブラウザー外実行のアプリケーションが起動されるのを確認することができると思います。

図11 コードによるアプリケーションのインストールの実行結果
図11 コードによるアプリケーションのインストールの実行結果

 アプリケーションがインストールされた状態でプログラムを更新し(例えばリスト8のようなコードを追加して)アプリケーションの更新ボタンをクリックすると、アプリケーションの更新が行われることを確認できると思います。

[リスト8]MainPageの一部を更新
public MainPage()
{
    InitializeComponent();

    // インストール状態の表示
    インストール状況の表示();
    Application.Current.InstallStateChanged
                += Current_InstallStateChanged;
    // 更新終了時のイベントハンドラーを登録
    Application.Current.CheckAndDownloadUpdateCompleted
                += Current_CheckAndDownloadUpdateCompleted;

    Version.Text = "2.0";
}

 アプリケーションの更新をチェックする際にSilverlightアプリケーションはホストされていたWebアプリケーションと通信を行うため、Webサーバー(デバック時はVisual Studioの開発Webサーバー)が起動していないとSystem.Exceptionの例外が発生し更新を行うことができません。

次のページ
ブラウザー外実行アプリケーションのデバック実行

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Silverlight 3徹底入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト かるあ (杉山 洋一)(カルア(スギヤマ ヨウイチ))

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4702 2010/01/18 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング