MS_XBAP - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- 戻る(WPF)
- XBAP
- ClickOnce
- Silverlight
XBAP は www ブラウザ上で動作する WPFアプリケーションで、
ClickOnceによる配布・自動更新機能が付属する。
(しかし、昨今、モダンブラウザに対応していない。)
-
「XBAP」は、.NET Framework により提供される ClickOnce技術を併用、
HTTP / HTTPS プロトコルによるデプロイと自動更新が可能である。 -
ClickOnce と基本的には同じであるが、
www ブラウザ上で動作するため、より強い「セキュリティ制限」を受ける
(サンドボックス化される)。- 具体的には、Administrators と Power Users グループのトークンが除外された
プロセスで実行されるため、『完全信頼』であっても
クライアント側コンピュータ上でのリソース アクセスには制限がある。 - また、IE にホストされるため、カレント ディレクトリは
%windir%\System32となる。
このため、コンフィギュレーション、業務データの保存先として
環境変数USERPROFILE以下のフォルダを使用するためには、
環境変数を使用した絶対パスで指すことができるようなプログラム部品が必要になる。
- 具体的には、Administrators と Power Users グループのトークンが除外された
移行メモ(正式名称): XBAP = XAML Browser Application
(XAML ブラウザー アプリケーション)。拡張子は.xbap。
補足(現在の位置づけ:完全に終了している): 本ページが
「モダンブラウザに対応していない」と書いているとおり、
XBAP は現在まったく使えない。
時期 出来事 2015 Chrome が NPAPI を廃止。Edge (旧) が ActiveX 非対応 2019 .NET Framework 4.8 で XBAP は既定で無効(部分信頼の廃止に伴う) 2022-06 IE 11 サポート終了 → 動作環境が消滅 現在 .NET Core 以降には移植されていない 「ブラウザ内でリッチ クライアントを動かす」という発想自体が、
Silverlight / Flash / Java アプレットと共に終わった。
後継にあたるのは WebAssembly(Blazor)である。
本ページは歴史資料として読むのが妥当である。
-
「XBAP」アプリケーションは、通常「インターネット ゾーン アクセス許可セット」に
制限された「サンド ボックス」と呼ばれる「部分信頼」の
セキュリティ境界内で動作するため、
通常の .NET アプリケーションと比べ制限がある。 -
制限無しで動作させるには、「完全信頼」を使用する。
- 「完全信頼」は、プロジェクトのプロパティから設定可能である。
- 「完全信頼」の「XBAP」を配置する場合、
セキュリティ ゾーンによって、それぞれ異なる施策が必要になる。
| 項番 | セキュリティ ゾーン | 動作 | 完全信頼を受け取るための操作 |
|---|---|---|---|
| 1 | ローカル コンピュータ | 完全信頼として動作する | - |
| 2 | イントラネットおよび信頼されたサイト | 完全信頼のプロンプトを表示 | プロンプトに出所が表示されるように、証明書を使用してコード サイニングを行う。 |
| 3 | インターネット サイト | TTP(CA)から発行された証明書があれば、完全信頼として動作する。 | TTP(CA)の証明書を使用してコード サイニングを行う。 |
- 故に、「完全信頼」で動作させるには、基本的に、
証明書によるコード サイニングが必要になる。
「部分信頼」では実現できない機能が多い。
WPFをサポートする実行環境に加え「XBAP」をホスト可能な
www ブラウザが必要。
- .NET Framework のランタイムなどについては、必須コンポーネントに含める
- クライアントへのインストールが不要なものであれば、
参照設定のローカルコピーをtrueに設定。
- 別ウィンドウやモーダル ダイアログとして
Windowの起動ができない
(ただし Win32 ダイアログについては起動可能)。 - モーダル ダイアログに相当する代替表現として、「ユーザ コントロール」を、
ルートのパネル要素に追加(Children.Add)する方法がある。
完全信頼であってもクライアント PC 上でのリソース アクセスには制限があるので
注意する(Administrators と Power Users グループのトークンが除外された
プロセスで実行される)。
[F5]ボタンを押下すると、当該画面の再初期化
(コンストラクタや、Page_Loaded イベントの実行)が発生する。
これは、以下のようなコードで抑止できるが、
www ブラウザのアドレスバーにフォーカスをあてた状態で F5 を押下した場合など、
完全な抑止ができない。
<Page x:Class="WpfBrowserApplication1.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Page1" KeyDown="Page_KeyDown">private void Page_KeyDown(object sender, KeyEventArgs e) {
if (e.Key == Key.F5) e.Handled = true;
}-
NavigationWindow/Pageは、画面遷移の履歴を保持し、
www ブラウザの[進む]・[戻る]ボタンから、
[進む]・[戻る]操作が可能となっている。- こちらも(上記、「F5 ボタンの抑止」と同様に)、
[進む]・[戻る]時に、当該画面の再初期化が発生する。 - また、このため、バック サブミットのような操作が行われ得るので、
必要に応じてこの[進む]・[戻る]操作を抑止する必要がある。
- こちらも(上記、「F5 ボタンの抑止」と同様に)、
-
IE6 / Firefox では、
Page.ShowsNavigationUIプロパティをfalseに
設定することで[進む]・[戻る]ボタンを非表示にできるが、
IE7 以降では、falseに設定しても非表示にはならない。- このため、画面遷移時の
Frame.Navigatedイベントなどで、
画面遷移の履歴を削除するか、 - 運用(責任の所在をユーザのオペレーションに委任すること)で
回避するようにする。
- このため、画面遷移時の
補足(同じ問題は Web でも起きる): 「F5 と[戻る]で再初期化・
二重サブミットが起きる」という問題は、XBAP 固有ではなく
ブラウザ上で動作する全てのアプリに共通する。
ASP.NETでも同様で、
現在は PRG パターン(Post/Redirect/Get) や
トークンによる二重送信防止で対処するのが標準である。
「運用で回避」より、設計で潰す方が確実である。
- アセンブリの取得・更新のたび、各バージョンのアセンブリがダウンロードされるため、
各バージョンのアセンブリがダウンロード キャッシュ
(C:\WINDOWS\assembly\Download)に溜まる。 - ディスク容量に問題がある場合は、クライアント側で
gacutil /cdlコマンドを実行して、ダウンロード キャッシュをクリアする。
-
WPF XAML ブラウザー アプリケーションの概要 | Microsoft Learn
https://learn.microsoft.com/dotnet/desktop/wpf/app-development/wpf-xaml-browser-applications-overview -
.NET Framework 4.8 における XBAP の既定無効化
https://learn.microsoft.com/dotnet/framework/migration-guide/retargeting/48-472
Tags: 移行, .NET開発, UIサブシステム, WPF/Silverlight, XAML, セキュリティ