かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

信頼モードの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とデスクトップ画面の右下に出てきます。

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