Out of Browser (その1)

Silverlight 4 では Out of browser (かつ trusted) で動かした時にできることが大幅に増えたってことで、ちょっと触ってみます。実は Silverlight 3 の OOB はおまけみたいな印象で特に重要視しなかったのであまり触ってないんですよね・・・。

まずは VS でプロジェクトを作ってデバッグ出来るまでを。

とりあえず以下のようなプロジェクトを作ります。

普通の Silverlight Application のプロジェクトですね。

で、簡単な処理を書いておきます。ボタンが押されたらメッセージボックスを表示するだけです。

<Grid x:Name="LayoutRoot" Background="White">
  <Button Content="Click Me" HorizontalAlignment="Center" 
    VerticalAlignment="Center" Click="Button_Click" />
</Grid>
private void Button_Click(object sender, RoutedEventArgs e) {
  MessageBox.Show("Hello Oob");
}

動かすと以下のような感じです。

では、こいつを OOB 対応にします。

プロジェクトのプロパティを開いて Silverlight タブにある Enable running application out of the browser にチェックを入れます。チェックボックスのとなりに Out-of-Browser Settings... って気になるボタンがありますが、今回はほっておきましょう。

チェックを入れるとプロジェクトの Properties フォルダの下に OutOfBrowserSettings.xml ってのが作成されます。どうやらここに実態が書かれていて、ビルドのときに AppManifest.xml に織り込まれるっぽいです。

実行して、右クリックしてみると「このコンピューターに・・・」って項目が増えます。これでインストールできますね。

インストールするとデスクトップにショートカットが作られます。


実態はどこにあるのかなと思って探してみると、IsolateStorageのフォルダ(is)の隣にOutOfBrowserってフォルダがあってその中に入ってました。


さて、ここまででアプリを作ってデスクトップにインストールまでが完了しました。次はこれをデバッグ出来るようにします。


プロジェクトのプロパティから Debug タブを選択します。Installed out-of-browser Application のラジオボタンにチェックを入れて、今インストールしたアプリを選択します。

これだけです。

で、変更を保存して F5 で実行してみると・・・

ブレイクポイントを設定してみると・・・

無事にアプリが立ち上がってブレイクポイントでも止まりました。ちなみにインストール前にこの項目をチェックして動かすと、ちゃんとダメだよって怒られました。なので、少なくともOOBアプリケーションを作っているとしてもブラウザ上で動かせるようにする必要はあると、画面が立ち上がる前にOOB専用のコードをノーチェックで入れてはいけないってことになりますね。

ここで、ちょっと実験。コードを変更して、デバッグを実行するとどうなるか。ちゃんと変更が反映されるのか。はたまた、もう一回インストールが必要なのか。まぁ、もう一回インストールが必要とかって言われるとそこでやる気の8割りは削がれてしまうのですが・・・。

<Grid x:Name="LayoutRoot" Background="White">
  <Button Content="Click Me! Click Me!" HorizontalAlignment="Center" 
    VerticalAlignment="Center" Click="Button_Click" />
</Grid>

実行してみます。

おぉぉ、ちゃんと反映されてますね。

さらにインストールされた実態のほうはどうなっているかというと・・・


XAPファイルの日付だけが更新されていますね。どうやら変更があった場合は、直接このXAPファイルを置き換えるようです。


さて、OOBアプリをつくってデバッグするとこまで見てみました。次回*1はもうちょっと他の機能を見ていきたいと思ってます。

*1:その1とかって書いて連載っぽくした日記で、ちゃんと続いたのって実はないのですが・・・