かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

信頼モードのSilverlight4アプリのお試し

Out of browserで動かすときに信頼モードにすることができると聞いたので試してみました。
試した内容は、ダイアログを経由しないファイルアクセスです。
(本当はCOMオートメーション試したかったけど、Officeが家のPCに入ってないことに気づいた)

作ってみよう

まず、Silverlightアプリケーションを新規作成します。ここでは、FullTrustSLAppという名前で作りました。
ボタンを1つ、ぽとっと置いてContentにOpenと指定して、クリックイベントを割り当てます。

<UserControl x:Class="FullTrustSLApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <Button Content="Open" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    </Grid>
</UserControl>

そして、クリックイベントに以下のコードを書きます。

using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;

namespace FullTrustSLApp
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // ドキュメントフォルダを取得
                var docDir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                // その下のtest.txtのパスをゲット
                var file = System.IO.Path.Combine(docDir, "test.txt");

                // ファイルを開いて1行読み込んで
                string text = string.Empty;
                using (StreamReader sr = new StreamReader(file))
                {
                    text = sr.ReadLine();
                }
                // 読み込んだものを表示する(何気にこれもSL4の機能)
                NotificationWindow notify = new NotificationWindow
                {
                    Height = 100,
                    Width = 100,
                    Content = new TextBlock { Text = text }
                };
                notify.Show(4000);
            }
            catch (Exception ex)
            {
                // よからぬことが起きてたら表示する
                MessageBox.Show(ex.ToString());
            }
        }
    }
}

単純にファイルを開いて表示してるだけです。表示にもNotificationWindowというSilverlight 4で追加されたものを使っています。

Out of browserの設定

プロジェクトのプロパティに「Enable running application out of the browser」と言う項目があるのでチェックをします。
そして、Out-of-Browser Settingsというボタンがあるのでクリックして設定画面を開きます。
設定画面の下の方に、Require elevated trust when running outside the browserという項目があるのでチェックします。これにチェックを入れると、ぶいぶい言わせることが出来るようになります。

このほかにも、Silverlight 3の頃に比べると設定項目が増えたような気がします。

実行してみよう

ドキュメントフォルダの下にHello worldという内容でtest.txtを作成しました。
その後にアプリケーションを実行します!実行すると、ブラウザで表示されるので、ファイルは読めないはずですけど、とりあえずボタンをぽちっとして動かしてみました。
やっぱり例外が出てファイルを読み込めません。

次に右クリックメニューから、このアプリケーションをインストールしてみます。

インストールすると、Out of Browserモードのアプリケーションが起動するので、ボタンをぽちっと押します。そうすると、今度はHello worldとデスクトップ画面の右下に出てきます。

確かに、ファイルが読めてます。以上!