Silverlight3 - OutOfBrowser

| | コメント(0)
Silverlight 3の新機能であるOut of Browserに対応してみます。

まず、Silverlightプロジェクトで、Out of Browserを有効にします。
[プロジェクト(P)] - [Silverlight プロジェクトのオプション(O)] - [ブラウザーの外でアプリケーションを起動(O)]
これだけです。

こうすることで、ブラウザ内で起動されたSilverlightアプリケーションのコンテキストメニューに[このコンピューターにXXXXをインストールします...]が表示されます。
このメニューを選択すれば、インストールすることができます。

しかし、場合によっては、アプリケーションの中でインストールを促したい場合があると思いますので、アプリケーション内からインストールできるようにしてみます。

前回作ったVideoPlayerアプリケーションにInstallボタンを追加します。
イベント ハンドラーではApplication.Installメソッドを呼び出すだけです。
private void InstallButton_Click(object sender, RoutedEventArgs args)
{
    try {
        if (!Application.Current.Install()) {
            return;
        }
    } catch (Exception e) {
        MessageBox.Show(e.ToString());
        return;
    }
}

[Install]ボタンをクリックすると、インストール確認ダイアログが表示されます。
このプロセスは、セキュリティ上、バイパスできません。

既にインストールされている場合、InvalidOperationExceptionがスローされます。
とりあえず、実行

すぐ気づくと思いますが、[Install]ボタンをSilverlightアプリケーション内に入れると、 ブラウザー外で起動された場合に、ボタンを非表示にしないといけないので、 javascriptでインストールできるようにしてみます。
とりあえず、実行

残念です。
javascriptからの呼び出しに対して、Application.Installメソッドは、常にfalseを返してきます。
信用できないスレッドからの呼び出しに対しては、インストールさせないようになっています。

仕方がないので、ブラウザ外で起動されている場合は、[Install]ボタンをDisabledにするようにしましょう。
if (Application.Current.IsRunningOutOfBrowser) {
    this.InstallButton.IsEnabled = false;
}


なお、Silverlightプログラムを普通のアプリケーションのようにインストールする手段はありません。(たぶん)
その必要がある場合は、WPFアプリケーションをClickOnceでインストールするのが、常識的判断でしょう。


削除方法について書いておかなければなりません。
Silverlightアプリケーションを起動して、コンテキストメニューから削除します。
実行中に自分を削除するなんていうオペレーションは、私個人としては、非常に気持ちが悪いのですが、致し方ありませんね。
そのうち、Silverlightアプリケーションを管理する機能がつくのではないでしょうか。


デスクトップにできるショートカットの正体は、意外と単純です。
sllauncher.exe 2081097170.data.blogdns.net
というような形式です。

2081097170.data.blogdns.netがどこにあるかというと、
AppData\LocalLow\Microsoft\Silverlight\OutOfBrowser
の下にあります。

さらに、2081097170.data.blogdns.netを探検すると、面白いことがわかります。
index.htmlというファイルがあり、この中身を見ると、フルサイズでsilverlightアプリケーションを起動するHTMLだということがわかります。
試しに、このindex.htmlを編集してから、ブラウザ外で起動すると、アプリケーションの画面に反映されることがわかります。

Silverlightチームが、いかに楽をして、Out of Browserを実現したかがわかります。

コメントする


画像の中に見える文字を入力してください。