- ※適用バージョン:Windows 10 version 1709(build 16299)以降
はじめに
「タイムライン」はWindows 10 1803の新機能で、タスクビューの下に表示されます(次の画像)。
「タイムライン」には、アプリが登録した「ユーザーアクティビティ」がカードの形で表現されています。「ユーザーアクティビティ」とは、「いつ」/「どんなアプリが」/「何をしていたか」というアプリの状態を表すもので、「タイムライン」はそれを時系列で見せる仕組みなのです。この「タイムライン」を表示する機能はWindows 10 1803で搭載されたものですが、利用するAPIの方は先行して1709(build 16299)から導入されています。
「タイムライン」を利用するAPIや、「タイムライン」に表示するカードを「アダプティブカード」などを使ってカスタマイズする方法は、前回の記事で詳しく解説しました。「タイムライン」は、Windows FormsやWPF、あるいはMFCといった、従来のデスクトップアプリからも使えます。今回は、WPFアプリから利用する方法を紹介します。
WPFアプリを「タイムライン」から呼び出してもらうために、今回はWPFアプリをデスクトップブリッジ(Desktop Bridge)で「UWPアプリ化」します。デスクトップブリッジは、2016年のWindows 10 1607(build 14393)から利用できるようになりました。しかしその当初に提供されていた手段は、仮想マシンを使う大げさなDesktop App Converterか、すべてを手作業で行うMakeAppx.exeを使う方法くらいで、ちょっと取っ付きにくいものでした。それが最近のVisual Studio 2017では、ごく簡単に使えるようになっているのです。今回は、その「Windowsアプリケーションパッケージプロジェクト」を紹介します。
今回の記事は次のように進行します。まず、「ユーザーアクティビティ」を「タイムライン」に登録する機能を、生粋のWPFアプリに組み込みます。続いて、デスクトップブリッジのプロジェクトを追加して、WPFアプリを「UWPアプリ化」します。最後に、「タイムライン」から呼び出してもらったときの対応を組み込みます。
対象読者
- Windows用のアプリを作っている開発者
必要な環境
サンプルコード(GitHub)を試してみるには以下の環境が必要です。
- Windows 10 1803以降
- Visual Studio 2017 Version 15.5以降(無償のCommunity Editionで可)
- UWP用Windows 10 SDK:C#/VB用の10.0.16299以降
どんな機能なのか?
デスクトップブリッジとは、従来のデスクトップアプリ(.NET Frameworkのものとは限りません)を「UWPアプリ化」する技術です。
「UWPアプリ化」によって、まず、アプリの配布方法がUWPアプリと同じになります。一般向けのMicrosoft Store(旧称:Windows Store)などで公開したり、購入したデジタル証明書を使って署名したパッケージを配布したりできます。途中での改ざんやウイルス感染を心配しなくてよい状態で、エンドユーザーの元に届けられるわけです。インストールされるフォルダはAdmin権限でもアクセスできない場所で、それでも改ざんされた場合には起動しなくなるなど、インストール後の改ざん対策としても有効です。また、「Store」(一般向けのMicrosoft Storeとビジネス向け/教育機関向けMicrosoft Store)で配布すれば、アプリのアップデートは自動で行われます。
次に、「UWPアプリ化」したアプリには、UWPのパッケージIDが与えられます。これによって、従来のデスクトップアプリからは利用できなかったUWPのAPIの一部が、利用できるようになります。詳しくは、連載第2回の2ページ目をご覧ください。デスクトップブリッジによって、従来のデスクトップアプリからUWPのAPIを最大限に利用できるのです。
そして、「UWPアプリ化」したアプリは、UWPのサンドボックスに制限されません。これが、カギかっこ付きで「UWPアプリ化」と表記している理由です。「UWPアプリとはUWPのサンドボックス内で動作するもの」と考えたとき、デスクトップブリッジで作られたアプリはその定義から外れているのです。UWPのサンドボックスは、タスクマネージャーではRuntime Brokerというプロセスに見えます。次の画像でRuntime Brokerが付随しているアプリが3つ見えていますが、それらはUWPアプリです。そして、茶色いアイコンの「UF05 (WPF-DesktopBridge…」というアプリが見えますが、これが「UWPアプリ化」した今回のサンプルコードです。これにはRuntime Brokerが付いていません。デスクトップブリッジによって、UWPの制限を受けることなく何でもできるというわけです(レジストリや一部のファイルシステムへのアクセスは仮想化されるなど、いくつか最低限のガードは掛かっています)。実際に今回のサンプルコードでは、UWPアプリには許されていないプロセス間通信を実装しています。
デスクトップブリッジでStoreに出すのは、ちょっとハードルが高くされている
簡単に使えるようになったデスクトップブリッジですが、「Store」に申請するルートは一般のUWPアプリとは別で、Desktop Bridge Sign Up Form(英語のみです)から申請します。厳しく審査されるのは、本文に書いたようにデスクトップブリッジは何でもできるからです。ウイルスやマルウェアも「UWPアプリ化」できてしまうのですから(実行コードをディスクに書き込むアプリは審査の際の自動テストではねられることになってはいます)。
デスクトップブリッジの使いどころとしては、組織内に配布するアプリが向いているかもしれません。デジタル証明書を使って署名したパッケージを展開するのであれば、Microsoftの審査は関係ありませんので。