Silverlight 4 の ブラウザー外実行 徹底解説 第 2 弾

セッション ID:T6-303
Silverlight 4 の
ブラウザー外実行
徹底解説 第 2 弾
マイクロソフト
デベロッパー & プラットフォーム統括本部
デベロッパー エバンジェリスト
大西 彰
セッションの目的とゴール
Session Objectives and Takeaways
セッションの目的
Silverlight のブラウザー外実行機能を理解する
セッションのゴール
ブラウザー内とブラウザー外での Silverlight
ランタイムの動作の違いを説明できるようになる
ブラウザー外実行用の主要な API について
コードを書いて利用できるようになる
信頼されたアプリケーション モードによる
ブラウザー外実行を使って Windows デスクトッ
プ アプリケーション を作れるようになる
3
アジェンダ
Silverlight アプリケーションの動作構造
開発ツールによるブラウザー外実行の設定
Silverlight のブラウザー外実行の基本機能
サンドボックス モードの新機能
信頼されたアプリケーション モードの機能
概要
4
デモが中心
確認
Silverlight のバージョンと進化
普及率
2007 年 9 月
v1.0
XAML +
JavaScript
• 動画配信
• JavaScript API
2007
5
2008 年 10 月
2
2009 年 7 月
XAP と
3
マネージ
コード
• DRM
• コントロール
• .NET 開発環境
2008
•
•
•
•
•
•
ブラウザー
外実行
Smooth Streaming
H.264 対応
コントロールの充実
ブラウザー外実行
アクセシビリティ対応
マルチタッチ対応
2009
2010 年 4 月
4
信頼された
アプリケー
ション
• 業務アプリケー
ション開発向けの
機能拡充
• サンドボックス
緩和 (権限昇格)
2010
Silverlight 4 の強化ポイント
業務アプリケーション向けの機能拡充
UI の改善 (マウス・クリップボードなど)
データ バインディング、通信機能
WCF RIA サービス
ブラウザー外実行の進化系
Silverlight 4 の新機能
http://msdn.microsoft.com/ja-jp/library/dd772166(v=VS.95).aspx
6
Silverlight の技術スタック その 1
ブラウザー内実行の場合
Silverlight アプリケーション
パッケージ (.XAP ファイル)
Silverlight Runtime
.NET Framework サブセット / CLR
アンマネージ コード ( Native の .DLL )
HTML
Network
Web ブラウザー JavaScript
7
Silverlight アプリケーションの
動作構造と Application クラス
System.Windows.Application
http://msdn.microsoft.com/ja-jp/library/ms588794(v=VS.95).aspx
Silverlight アプリケーションをカプセル化
するクラスで次のサービスを提供
アプリケーションのエントリ ポイント
アプリケーションの有効期間
アプリケーション管理
アプリケーション スコープ リソース
ハンドルされない例外の検出
8
アプリケーションの起動から終了
public partial class App : Application
{
// アプリケーション クラスのコンストラクター
public App()
{
// アプリケーションの初期化
this.Startup += this.Application_Startup;
// アプリケーションの終了
this.Exit += this.Application_Exit;
// ハンドルされない例外処理
this.UnhandledException +=
this.Application_UnhandledException;
//
InitializeComponent();
}
// 以下、省略…
9
最初に表示される画面はどこで決まる?
public partial class App : Application
{
// アプリケーション クラスのコンストラクター
public App()
{
// 省略…
}
private void Application_Startup(
object sender, StartupEventArgs e)
{
// 次の行で、最初の画面が決まります
this.RootVisual = new MainPage();
}
}
10
// 以下、省略…
Silverlight の技術スタック その 2
ブラウザー外実行の場合
Silverlight アプリケーション
パッケージ ( .XAP )
Silverlight Runtime
.NET Framework サブセット / CLR
アンマネージ コード ( Native の .DLL )
SLLauncher.exe
11
sllauncher.exe
Silverlight のブラウザー外実行プロセス
ブラウザー外実行アプリケーションの管理
インストール
アンインストール
インストール無しでの起動
/install
/uninstall
/emulate
※ sllauncher.exe の場所
32 ビット OS - C:\Program Files\Microsoft Silverlight\
64 ビット OS - C:\Program Files (x86)\Microsoft Silverlight\
コマンドの解説 – Silverlight Deployment Guide v4 (英語)
http://download.microsoft.com/download/C/D/5/CD5AAAE3-21F7-47A8-B7D5-39E36BAF9AC8/Silverlight_Deployment_Guide.docx
エラー メッセージの解説 (英語)
http://go.microsoft.com/fwlink/?LinkId=188103
12
ブラウザー外実行を許可するには
AppManifest.xml に
<Deployment.OutOfBrowserSettings> を追加
※ 技術的には再ビルドしなくても変更可能
現実的にはブラウザー外実行用のコードを加えてビルド
<Deployment … 省略 … >
<Deployment.OutOfBrowserSettings>
<OutOfBrowserSettings
ShortName="01-OOB-Basic アプリケーション"
EnableGPUAcceleration="False"
ShowInstallMenuItem="True">
… 省略 …
</OutOfBrowserSettings>
</Deployment.OutOfBrowserSettings>
…
13
開発ツールによる
ブラウザー外実行の設定
Visual Studio 2010
Silverlight プロジェクトのプロパティ
設定後は、ブラウザー外実行の形で
デバッグ可能
(インストールやアンインストールは不要)
Expression Blend 4
Silverlight プロジェクトの設定
ブラウザー外実行の形でテスト実行可能
14
Visual Studio 2010 上の設定 (1)
Silverlight プロジェクトの [プロパティ]
アプリケーションの
ブラウザー外実行を
有効にする
設定画面を表示
15
Visual Studio 2010 上の設定 (2)
ブラウザー外実行の設定
アプリケーション ウィンドウの設定
アプリケーションのショートカット
ウィンドウ スタイルは、後述の信頼
されたアプリケーションで利用
16
Expression Blend 4 上の設定
[プロジェクト] メニューの
[Silverlight プロジェクトの設定]
17
Silverlight のブラウザー外実行の
基本機能
アプリケーションのインストール
アプリケーションの更新プログラムの確認
ネットワーク接続の検出
ブラウザー外実行状態の検出
アプリケーションの削除
18
アプリケーションのインストール
3 種類のインストール方法
コンテキスト メニュー
インストール用 API
コマンド
インストール後は、オフラインでも実行可能
ネットワーク接続の検出
分離ストレージは 25 MB (既定値)
インストールに
管理者権限は不要
19
コンテキスト メニューからの
インストール
20
インストール用 API
http://msdn.microsoft.com/ja-jp/library/dd731949(v=VS.95).aspx
インストール実行
Application.Install() メソッド
インストール状態の確認
Application.InstallState プロパティ
21
InstallState
説明
NotInstalled
インストールされていない
Installing
インストール中
Installed
インストール済
InstallFailed
インストールに失敗
インストール用 API 利用例
private void btnInstall_Click(
object sender, RoutedEventArgs e)
{
try
{
Application.Current.Install();
}
catch (InvalidOperationException)
{
MessageBox.Show("インストール済みです");
}
}
22
コマンドによるインストール
sllauncher.exe を利用
共有フォルダーなど
xap ファイルが
格納されている UNC パス
sllauncher.exe
/install:"\\AppServer\packages\myApp.xap"
/origin:"http://oniak3.com/myApp.xap"
/shortcut:desktop+startmenu
/overwrite
アプリケーションの
ショートカット作成場所
23
アプリケーションをホストしている
Web サイトの URL を指定
更新プログラムの確認
http://msdn.microsoft.com/ja-jp/library/dd731813(v=VS.95).aspx
Application クラス
CheckAndDownloadUpdateAsync() メソッド
CheckAndDownloadUpdateCompleted イベント
ポイント
サーバーと通信し、パッケージが更新されて
いればアプリケーションがダウンロードされる
パッケージが最新でもユーザー側の Silverlight
ランタイムのバージョンが古い場合は、最新の
パッケージをダウンロードしない
信頼されたアプリケーションの場合、
XAP 署名が必須 (署名がないと更新不可)
24
アプリケーション更新用 API 利用例
App.Current.CheckAndDownloadUpdateCompleted
+= App_OnCheck;
App.Current.CheckAndDownloadUpdateAsync();
// …
private void App_OnCheck(object sender,
CheckAndDownloadUpdateCompletedEventArgs e)
{
if (e.UpdateAvailable)
{
// アプリを再起動すると最新になることに注意
MessageBox.Show("ダウンロードしました");
}
}
25
ネットワーク接続の検出
http://msdn.microsoft.com/ja-jp/library/3ew4thdx(v=VS.95).aspx
ネットワーク インターフェイスの
IP アドレス変更イベント
NetworkChange.NetworkAddressChanged
任意のネットワークが利用可能かどうかを
判定するメソッド
NetworkInterface.GetIsNetworkAvailable()
26
ネットワーク接続の検出例
public MainPage()
{
NetworkChange.NetworkAddressChanged +=
NetworkChange_NetworkAddressChanged;
}
void NetworkChange_NetworkAddressChanged(
object sender, EventArgs e)
{
if (NetworkInterface.GetIsNetworkAvailable()) {
// オンライン
}
else
{
// オフライン
}
}
27
ブラウザー外実行状態の検出
http://msdn.microsoft.com/ja-jp/library/dd730900(v=VS.95).aspx
Application クラス
IsRunningOutOfBrowser プロパティ
true : ブラウザー外で実行されている
false : ブラウザー内で実行されている
28
ブラウザー外実行状態の検出
Application.IsRunningOutOfBrowser プロパティ
private void Application_Startup(
object sender, StartupEventArgs e)
{
// ブラウザー内と外の場合、それぞれ別の画面に設定
if (Application.Current.IsRunningOutOfBrowser)
{
this.RootVisual = new OutOfBrowserPage();
}
else
{
this.RootVisual = new InBrowserPage();
}
}
29
アプリケーションの削除
セキュリティの関係で、アプリケーション
を削除するための API は提供なし
コンテキスト メニューから手動で削除
コントロール パネルの [プログラム] からの
アンインストール
コマンドで削除
30
手動によるアプリケーションの削除
コンテキスト メニュー
起動中のアプリケー
ション内を右クリック
31
コントロール パネル
[プログラムと機能]
との統合
コマンドによるアプリケーションの
削除
sllauncher.exe を利用
sllauncher.exe /uninstall
/origin:"http://oniak3.com/myApp.xap"
アプリケーションをホストしている
Web サイトの URL を指定
32
サンドボックス モードの新機能
WebBrowser コントロール
WebBrowserBrush オブジェクト
アプリケーション ウィンドウの制御 API
NotificationWindow クラス
33
WebBrowser コントロール
http://msdn.microsoft.com/ja-jp/library/cc491073(v=VS.95).aspx
HTML のレンダリング
URI を指定
HTML 文字列を指定
2 方向の相互運用性
スクリプト実行
スクリプトからの通知
ブラウザーのプラグイン
と表示可能な文書を
サポート
必ず最前面に表示
コントロールの利用例
34
WebBrowser 利用例
・XAML
<WebBrowser x:Name="wb" Source="a.htm" />
・a.htm 内の JavaScript
function btnSendToSilverlight_onclick() {
// Silverlight へ通知
window.external.notify(txtInput.value);
}
・C#
wb.ScriptNotify += wb_ScriptNotify;
void wb_ScriptNotify(
object sender, NotifyEventArgs e)
{
txtStatus.Text = e.Value;
}
35
WebBrowserBrush オブジェクト
http://msdn.microsoft.com/ja-jp/library/ff400447(v=VS.95).aspx
HTML コンテンツと
Silverlight の重ね合わせ
に利用
不透明度、回転、Pixel
Shader エフェクト
ブラシ上の HTML コンテ
ンツとは対話できない
ことに注意
HTML コンテンツの
再描画は手動
ブラシを適用した楕円に
疑似 3D と波紋のエフェクトを加えた例
36
WebBrowserBrush 利用例 (XAML)
図形の Fill プロパティでブラシを指定
<WebBrowser x:Name="wb" />
<Ellipse x:Name="el">
<Ellipse.Fill>
<WebBrowserBrush
x:Name="wBrush" SourceName="wb"/>
</Ellipse.Fill>
</Ellipse>
37
WebBrowserBrush 利用例 (C#)
private DispatcherTimer dt = new DispatcherTimer();
public MainPage()
{
InitializeComponent();
dt.Interval = new TimeSpan(100);
dt.Tick += new EventHandler(dt_Tick);
dt.Start();
}
void dt_Tick(object sender, EventArgs e)
{
// 最新の HTML コンテンツで再描画
wBrush.Redraw();
}
38
アプリケーション ウィンドウの制御
top, left http://msdn.microsoft.com/ja-jp/library/ms590112(v=VS.95).aspx
height
width
39
topmost
ウィンドウの制御における注意点
制御用 API が利用できるタイミング
Application.Startup イベント ハンドラー内
ボタン Click イベント ハンドラーなどでの、
ユーザーによる操作に対する応答直後
信頼されたアプリケーションは制約なし
40
ウィンドウの制御 API 利用例 (C#)
private void Application_Startup(object sender,
StartupEventArgs e)
{
this.RootVisual = new MainPage();
if (Application.Current.IsRunningOutOfBrowser)
{
Window mainWindow =
Application.Current.MainWindow;
mainWindow.Top = 10;
mainWindow.Left = 20;
mainWindow.Width = 640;
mainWindow.Height = 480;
}
}
41
NotificationWindow クラス
http://msdn.microsoft.com/ja-jp/library/ee652604(v=VS.95).aspx
3 件の
ボイス メール有
聞く
42
x
NotificationWindow の利用例 (C#)
if (Application.Current.IsRunningOutOfBrowser)
{
nw = new NotificationWindow();
nw.Content = nwContent; // 通知画面
nw.Height = nwContent.Height;
nw.Width = nwContent.Width;
// 2 つ以上の通知は許可されない
if (nw.Visible)
nw.Close();
nw.Content.DataContext = list[count];
nw.Show(5000);
// アプリケーション ウィンドウのアクティブ化
App.Current.MainWindow.Activate();
}
43
信頼されたアプリケーション モード
の機能
サンドボックスの制約を緩和
制限のないクロス ドメイン通信
ユーザーの同意、ユーザーが開始した操作に
関する要件の緩和
全画面表示サポート
アプリケーション ウィンドウのカスタマイズ
ユーザー プロファイルの特定フォルダー内の
ファイルへの直接アクセス
ネイティブ統合 (COM オートメーション)
XAP 署名
44
信頼されたアプリケーション モード
の実行状態の判定
Application.HasElevatedPermissions
プロパティ
http://msdn.microsoft.com/ja-jp/library/ee520185(v=VS.95).aspx
true
false
45
: 信頼されたアプリケーションとして
ブラウザー外で実行されている
: それ以外
クロスドメイン通信の制約緩和
http://msdn.microsoft.com/ja-jp/library/ee721083(v=vs.95).aspx#relaxed_crossdomain_access_restrictions
ドメイン間アクセス
クロス ドメイン ポリシーが不要
スキーム間アクセス制限なし
ソケット通信
ポリシー不要
任意のホストの任意のポート
マルチキャスト通信
ポリシー レスポンダーによる承認不要
46
全画面表示サポート
http://msdn.microsoft.com/ja-jp/library/ee721083(v=vs.95).aspx#fullscreen_support
ユーザーの同意不要で全画面表示に切替
ほとんどのキーボード操作が有効
取得できないキー操作もあることに注意
47
ウィンドウのカスタマイズ
http://msdn.microsoft.com/ja-jp/library/ee721083(v=vs.95).aspx#support_for_window_customization
3 通りのウィンドウ スタイルから選択
既定値 : タイトル バーと境界線を表示
罫線なし : タイトル バーと境界線を非表示
罫線なし角丸 : タイトル バーと境界線を
非表示で、
ウィンドウの隅の角を丸める
(半径 9 ピクセルの丸み)
WindowStyle : None
48
WindowStyle:
BorderlesRoundCornersWindow
ファイル システムへのアクセス
http://msdn.microsoft.com/ja-jp/library/ee721083(v=vs.95).aspx#file_system_access
ユーザー プロファイル
内の特定フォルダー
ドキュメント
ピクチャ
ミュージック
ビデオ
49
System.IO と関連型へ
のアクセス
Directory
DirectoryInfo
File
FileInfo
FileStream
Path
StreamReader
StreamWriter
ファイル システム アクセスの例 (C#)
if (Application.Current.HasElevatedPermissions)
{
string myDocuments = Environment.GetFolderPath(
Environment.SpecialFolder.MyDocuments);
string filename = "test.txt";
string path = System.IO.Path.Combine(myDocuments,
filename);
if (File.Exists(path))
{
string contents = File.ReadAllText(path);
MessageBox.Show(contents);
}
}
50
ネイティブ統合
http://msdn.microsoft.com/ja-jp/library/ff457794(v=vs.95).aspx
Windows プラットフォーム限定で
COM オートメーションを利用したシステム
統合が可能
AutomatinFactory.IsAvailable プロパティ
でオートメーションが利用可能かを判定
オートメーション オブジェクトの作成
AutomationFactory.CreateObject() メ
ソッド
オートメーション オブジェクトの取得
AutomationFactory.GetObject() メソッド
51
COM オートメーションの例 (C#)
Wscript.Shell を使ったコマンド実行
if (AutomationFactory.IsAvailable)
{
// C# の dynamic キーワードを使用するには、
// プロジェクトで Microsoft.CSharp.dll を
// 参照設定する必要があります。
using (dynamic shell =
AutomationFactory.CreateObject(
"WScript.Shell"))
{
shell.Run(@"cmd /k ping 127.0.0.1");
}
}
52
COM オートメーションの例 (C#)
Excel のイベント取得
dynamic excel;
public delegate void SheetChangedDelegate(dynamic
excelSheet, dynamic rangeArgs);
excel =
AutomationFactory.CreateObject("Excel.Application");
excel.SheetChange +=
new SheetChangedDelegate(OnSheetChanged);
// … 省略 …
private void OnSheetChanged (
dynamic excelSheet, dynamic rangeArgs)
{
dynamic sheet = excelSheet;
string name = sheet.Name;
}
53
オートメーションの詳細
http://msdn.microsoft.com/ja-jp/library/ee947176(v=VS.95).aspx
サポートされる機能
サポートされない機能
プロパティの設定、取得
インデックス化されたプロパ
ティの設定、取得
Positional and optional
parameters
参照渡しと値渡し
イン プロセスとアウト プロセス
サーバー
基本のデータ型
VARIANT、BSTR、SAFEARRAY、
IEnumVARIANT
Silverlight アプリ側でイベント
シンク
54
多次元配列、ジャグ配列
名前付き引数
型情報
COM Elevation
moniker
注意:
戻り値があるイベントは
サポートされません
オートメーション可能なサービス
Office 製品との相互運用
WMI (システム情報やファイル監視)
ADO (.NET 以前のデータ アクセス)
Windows 7 ロケーション API (GPS)
スピーチ エンジン
その他、COM でアクセス可能なもの…
55
XAP ファイルへのデジタル署名
信頼されたアプリケーションのみ対応
署名なし
56
署名あり
開発向けテスト証明書の作成例
ルート証明書
Visual Studio コマンド プロンプト (2010)
を利用すると PATH の設定が不要となります
makecert -n "CN=My Root Certificate Authority"
-r -a sha1 -sv c:\Demo\TestOOBRootCA.pvk
c:\Demo\TestOOBRootCA.cer -sr LocalMachine
-sky signature
コード署名用の子証明書
makecert -sv c:\Demo\TestOOBCodeSigningCA.pvk
-iv c:\Demo\TestOOBRootCA.pvk
-n "CN=Test OOB Crew Code Signing CA"
-ic c:\Demo\TestOOBRootCA.cer
c:\Demo\TestOOBCodeSigningCA.cer
57
XAP 署名の方法 (コマンド)
signtool.exe を利用
58
XAP 署名の方法 (Visual Studio IDE)
Silverlight プロジェクトのプロパティ
59
参考 : ブラウザー外実行の応用編
グループ ポリシーによる管理
オフライン DRM
Silverlight Analytics Framework
Microsoft Sync Framework 3.0
60
参考 : グループ ポリシーによる管理
http://go.microsoft.com/fwlink/?LinkId=169578
Silverlight に対するグループ ポリシー
DRM
Silverlight ランタイムの自動更新
信頼されたアプリケーション
Web カメラとマイクの利用
UDP マルチキャストの通信
信頼されたアプリケーション モードの利用
アプリケーションのインストールの可否
アプリケーションの実行の可否
注意 : サンドボックス モードには適用されません
61
参考 : オフライン DRM
http://msdn.microsoft.com/ja-jp/library/cc838192(v=VS.95).aspx
ライセンス サーバーと通信できない状態で
DRM で保護されたメディアの再生が可能
ビジネス モデルへの対応
購読、レンタル、購入
Silverlight 4 DRM の新機能
ライセンス管理用のストレージ
時間によるポリシー
H.264 と AAC コンテンツの対応
出力保護 (Output Protection) の対応
62
参考 : Silverlight Analytics Framework
http://msaf.codeplex.com/
Silverlight アプリケーションの
アクセス分析用のフレームワーク
主要な Web アクセス分析サービスに対応
独自の Web サーバーへのロギングも可能
ブラウザー外実行、オフライン時の動作に
も対応
63
参考 : Sync Framework 3.0
http://social.msdn.microsoft.com/Forums/ja-JP/synclab/threads
データ同期用のフレームワーク
Silverlight 対応版は、招待制の CTP 扱い
SQL Server や SQL Azure へ対応
詳細は MIX 10 のセッションを参考に
http://live.visitmix.com/MIX10/Sessions/SVC10
64
まとめ
Silverlight 4 のブラウザー外実行 徹底解説 第 2 弾
ランタイム 1 つで 2 種類の動作モード
ブラウザーのプラグイン
デスクトップ アプリケーション
Silverlight 4 に搭載されたブラウザー外実
行の新機能
WebBrowser 、NotificationWindow など
ウィンドウのカスタマイズ
信頼されたアプリケーション モード
サンドボックス セキュリティの緩和
Windows プラットフォームとの統合
65
関連セッション
T6-304:Expression Blend 4 でデザインする Silverlight 4
アプリケーション
T6-401:WCF RIA Services を使った Silverlight 4
アプリケーション開発 ~ 迅速性と効率性の追求 ~
T7-302:Windows Presentation Foundation 4
~ ビジュアル ステートを使ったカスタム コントロールの作り方 ~
T7-403:最新 OS WES 7 / WEC 7 / .NET Micro Framework に
よるクラウド時代のデバイス UX 開発
66
リファレンス
Silverlight デベロッパー センター
http://msdn.microsoft.com/ja-jp/silverlight/default.aspx
Silverlight ブラウザー外実行のサポート
http://msdn.microsoft.com/ja-jp/library/dd550721(v=vs.95).aspx
Microsoft Expression Blend 4
http://www.microsoft.com/japan/products/expression/products/blend_overview.aspx
Microsoft Silverlight Analytics Framework
http://msaf.codeplex.com/
Microsoft Web Platform
http://www.microsoft.com/web
67
ご清聴ありがとうございました。
T6-303
アンケートにご協力ください。
© 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should
not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS,
IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.