Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

簡単になったUWP Bridge
~Windows 10 1803の新機能「タイムライン」をWPFアプリに実装してみる

UWPアプリ開発の最前線 第6回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2018/05/10 14:00

 2018年春のWindows 10の大型アップデート「1803」の新機能「タイムライン」を、前回はUWPアプリから使ってみました。今回は、WPFアプリに「タイムライン」の機能を実装するために、Desktop Bridgeで「UWPアプリ化」する新しい簡単な方法を紹介します。

目次
  • 適用バージョン:Windows 10 version 1709(build 16299)以降

はじめに

 「タイムライン」はWindows 10 1803の新機能で、タスクビューの下に表示されます(次の画像)。

Windows 10 1803のタスクビュー画面
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アプリ化」したWPFアプリをインストールする画面
「UWPアプリ化」したパッケージをダブルクリックすると、このインストール画面が立ち上がる

 次に、「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アプリには許されていないプロセス間通信を実装しています。

UWPアプリにはRuntime Brokerが付いていて、「UWPアプリ化」したアプリには付いていない
タスクマネージャーで見るUWPアプリと「UWPアプリ化」したアプリ

デスクトップブリッジでStoreに出すのは、ちょっとハードルが高くされている

 簡単に使えるようになったデスクトップブリッジですが、「Store」に申請するルートは一般のUWPアプリとは別で、Desktop Bridge Sign Up Form(英語のみです)から申請します。厳しく審査されるのは、本文に書いたようにデスクトップブリッジは何でもできるからです。ウイルスやマルウェアも「UWPアプリ化」できてしまうのですから(実行コードをディスクに書き込むアプリは審査の際の自動テストではねられることになってはいます)。

 デスクトップブリッジの使いどころとしては、組織内に配布するアプリが向いているかもしれません。デジタル証明書を使って署名したパッケージを展開するのであれば、Microsoftの審査は関係ありませんので。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • biac(ばいあっく)

    HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来20年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。 Microsoft MVP (Windows Developm...

バックナンバー

連載:UWPアプリ開発の最前線
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5