Slide 1

Slide 1 text

デスクトップ アプリがこの先生 きのこるには //2016 2016/05/21 Madosta #1 / CSUG Manato KAMEYA (@Grabacr07)

Slide 2

Slide 2 text

Agenda Goal Project Centennial (Desktop App Converter) の概要 Windows Desktop App -> UWP App への移行パス  Desktop App Converter が与える影響

Slide 3

Slide 3 text

Self Introduction 亀谷学人 (かめやまなと) • 1987年生まれ • 仙台出身 / 東京在住 Windows Study Meeting (まどすた) staff Microsoft MVP for Visual Studio and Development Technologies 長いよ。 • ソフトウェア エンジニア • クライアント設計 / C# / XAML Twitter: @Grabacr07 Facebook: manato.kameya Blog: http://grabacr.net/

Slide 4

Slide 4 text

My Apps KanColleViewer 「艦これ」 プレイング ツール C# + WPF (.NET Framework 4.6.2) SylphyHorn 仮想デスクトップ ツール アクティブ ウィンドウごと移動

Slide 5

Slide 5 text

Windows Bridge の行方 //build/ 2015 ~

Slide 6

Slide 6 text

遡ること 1 年前…

Slide 7

Slide 7 text

//build/ 2015 Windows Store Universal Windows Platform .NET & Win32 Web Android (Java/C++) iOS (Objective C) Windows Bridge

Slide 8

Slide 8 text

Windows Bridge 既存アプリの UWP 化 Windows 10 (UWP) で動作する形式に変換する技術、およびツール群 Windows Bridge for Android (Project Astoria) Windows Bridge for iOS (Project Islandwood) Windows Bridge for Classic Windows apps (Project Centennial) Windows Bridge for Web apps (Project Westminster)

Slide 9

Slide 9 text

Windows Bridge 既存アプリの UWP 化 Windows 10 (UWP) で動作する形式に変換する技術、およびツール群 Windows Bridge for Android (Project Astoria) Windows Bridge for iOS (Project Islandwood) Windows Bridge for Classic Windows apps (Project Centennial) Windows Bridge for Web apps (Project Westminster) このあと話すやつ

Slide 10

Slide 10 text

特に続報もなく、時は過ぎる (その間、@Grabacr07 は迷走)

Slide 11

Slide 11 text

Kind of Windows app Classic Desktop app 従来のアプリケーション (.exe で実行するやつ) 基本的になんでもできる Universal Windows Platform app Windows ストアで配布されるアプリケーション いろんなデバイスで動く

Slide 12

Slide 12 text

My Apps WPF, IE Shell, Key hook, etc. やりたい放題系アプリ Kind of Windows app Classic Desktop app 従来のアプリケーション (.exe で実行するやつ) 基本的になんでもできる Universal Windows Platform app Windows ストアで配布されるアプリケーション いろんなデバイスで動く

Slide 13

Slide 13 text

Distribution アプリの配布をどうするか Classic Windows app の悩みどころ UWP だったら 配布はストアにお任せカンタン やりたい放題系なので UWP になるわけがない

Slide 14

Slide 14 text

Distribution アプリの配布をどうするか Classic Windows app の悩みどころ UWP だったら 配布はストアにお任せカンタン やりたい放題系なので UWP になるわけがない KanColleViewer の思い出 レンサバ追い出されたり (アクセス過多) MSDN 無料枠使い切って課金されたり 公開から 2 年半 約 350 万 DL

Slide 15

Slide 15 text

TouchMe Gesture Studio 自力解決してるアプリ Windows Store 8.1 + Classic Desktop Project Centennial には頼っていない 主機能・動作エンジンは Classic Desktop app として提供 主機能インストーラー DL、 課金、ユーザー設定の UI を Windows Store app として提供

Slide 16

Slide 16 text

UWP + .NET その手があったか…! UWP (フロントエンド) + .NET (エンジン) はアリなのか ?  ストアで検索してインストールして設定するまで UWP  実際にバックグラウンドで動作しているのは .NET SylphyHorn app SylphyHorn.exe

Slide 17

Slide 17 text

UWP + .NET SylphyHorn でやってみた UWP アプリを起動して、 エンジンのインストーラーを ダウンロードさせる

Slide 18

Slide 18 text

UWP / .NET Bridge 両アプリの繋ぎこみ ストア アプリのデータは %LocalAppData%¥Packages へ アプリのパッケージ名が判れば保存先が確定する SylphyHorn app SylphyHorn.exe Settings.xml Write Read Read FileSystemWatcher

Slide 19

Slide 19 text

UWP / .NET Bridge 両アプリの繋ぎこみ SylphyHorn app SylphyHorn.exe Settings.xml Write Read Read FileSystemWatcher await ApplicationData.Current .LocalFolder .GetFileAsync("Settings.xml"); var path = Path.Combine( Environment.GetFolderPath( Environment.SpecialFolder.LocalApplicationData), "Packages", "46846grabacr.net.SylphyHorn_vwznf8jfphrrc", "LocalState", "Setting.xml");

Slide 20

Slide 20 text

UWP + .NET 結論 申請通った(機械審査) bit.ly/SylphyHornApp Project Centennial は 生きてるのかわからんし… UWP + WPF は 存在が許された!

Slide 21

Slide 21 text

この話をサトヤ仙台で発表 (3 月下旬) この数日後に…

Slide 22

Slide 22 text

デスクトップ アプリを UWP へ Project Centennial

Slide 23

Slide 23 text

Project Centennial は生きていた!

Slide 24

Slide 24 text

Project Centennial UWP パッケージ化 既存の Win32 / .NET アプリを UWP と同じパッケージ化する パッケージ化だけで、中身は元のバイナリのまま … なので当然 10 Mobile では動作不可

Slide 25

Slide 25 text

Desktop App Converter Desktop app -> AppX 変換ツール Windows 10 Insider Preview 14316 で提供開始 インストーラーから AppX (UWP 配布パッケージ) を生成 .msi をサイレント モードで動作させ、展開されたファイルをパッケージ化する感じ MSI AppX ※ //build/ 2016 資料から引用

Slide 26

Slide 26 text

WiX Toolset モダンなインストーラー Windows Installer (.msi) を作る Bootstrapper (.exe) を作る .msi をサイレント モードで カスタム UI を内臓 (なので WPF 等々ご自由に) WPF + MVVM library (Livet) + Custom theme (MetroRadiance)、やりたい放題!!!

Slide 27

Slide 27 text

Desktop App Converter Windows 10 Insider Preview (Fast Ring) 14316 (4/7) … Bash、仮想デスクトップ改善、Dark テーマ 14328 (4/22) … UI 刷新 (Start menu, UAC ダイアログがキモい) 14332 (4/26) … あんまり覚えてない 14342 (5/10) … UAC ダイアログが青くなった

Slide 28

Slide 28 text

Desktop App Converter Windows 10 Insider Preview (Fast Ring) 14316 (4/7) … Bash、仮想デスクトップ改善、Dark テーマ 14328 (4/22) … UI 刷新 (Start menu, UAC ダイアログがキモい) 14332 (4/26) … あんまり覚えてない 14342 (5/10) … UAC ダイアログが青くなった Windows 10 Enterprise における Desktop App Converter のサポート Windows 10 Pro / Enterprise における Desktop App Converter のサポート 14328, 14332では Desktop App Converter は 動作しない (Known issue)

Slide 29

Slide 29 text

Setup the Desktop App Converter 必須環境 Windows 10 Enterprise (or Pro) x64 Insider Preview build 14342 ハードウェア要件 (x64 processor, Hardware-assisted virtualization, SLAT) Windows SDK for Windows 10 (推奨) ファイルと入手先 DesktopAppConverter.zip, BaseImage-14342.wim (3.2 GB) https://www.microsoft.com/en-us/download/details.aspx?id=51691

Slide 30

Slide 30 text

Setup the Desktop App Converter セットアップ ※ 管理者権限で実行 (Setup, Conversion, ぜんぶ) .¥DesktopAppConverter.ps1 -Setup ` -BaseImage .¥BaseImage-14316.wim ` -Verbose

Slide 31

Slide 31 text

Conversion and Deployment Evernote を UWP パッケージ化 DL してきたインストーラーを使って PowerShell 叩くだけ .¥DesktopAppConverter.ps1 ` -ExpandedBaseImage "C:¥ProgramData¥Microsoft¥Windows¥Images¥BaseImage-14342" ` -Installer 'C:¥Users¥grabacr07¥Work¥Evernote¥Evernote_6.0.6.1769.exe' ` -InstallerArguments "/quiet DISABLEADTSHORTCUTS=1" ` -Destination 'C:¥Users¥grabacr07¥Work¥Evernote¥Output' ` -AppExecutable 'C:¥Program Files (x86)¥Evernote¥Evernote¥evernote.exe' ` -PackageName Evernote ` -PackageDisplayName Evernote ` -Publisher "CN=grabacr.net" ` -PackagePublisherDisplayName "Reserved" ` -Version 1.0.0.0 ` -MakeAppx ` -Verbose Demo

Slide 32

Slide 32 text

Conversion and Deployment Evernote を UWP パッケージ化 出力先に AppX が生成されている デプロイは AppxManifeset.xml で Add-AppxPackage Demo Add-AppxPackage -Register "C:¥Users¥grabacr07¥Work¥Evernote¥Output¥AppxManifest.xml"

Slide 33

Slide 33 text

Benefit of the Desktop App Converter UWP パッケージ化で得られる恩恵 個人開発者: Windows Store で公開できる & マネタイズ 企業・組織: side loading / MDM が楽に? (やったことない) Filesystem / Registry への書き込みをリダイレクト処理  Registry 肥大化の防止 クリーンなインストール・アンインストール (ユーザーにとってのメリット)

Slide 34

Slide 34 text

Bridge to the UWP UWP アプリへの 5 つのステップ Convert Enhance Extend Migrate Expand

Slide 35

Slide 35 text

Bridge to the UWP Step 1: Convert Desktop app (.msi) から UWP (.appx) を作成 & デプロイ Windows Store への提出 シームレスなアップデート クリーンなアンインストール Classic Windows App Universal App Package

Slide 36

Slide 36 text

Bridge to the UWP Step 2: Enhance Desktop app 内部から UWP の API を呼び出し ライブ タイルのサポート Actionable Notifications (トースト通知操作) Cortana 他いろいろ Universal App Package Universal Windows API Classic Windows App Demo

Slide 37

Slide 37 text

Bridge to the UWP Step 3: Extend UWP App Service や Background tasks 等の機能追加 UWP App と Desktop App の共存  エントリー ポイントは UWP App 側へ  両者は App Service で通信 フロントエンドを XAML / コアを Win32 とか File Picker UI Universal App Package Universal Windows App Classic Windows App Demo

Slide 38

Slide 38 text

Bridge to the UWP Step 4: Migrate UWP 成分増やしていこうな がんばろう Universal App Package Universal Windows App Classic Windows App

Slide 39

Slide 39 text

Bridge to the UWP Step 5: Expand すべてのコードを UWP で 様々な Windows デバイスへ… ここまでできないアプリも それなりにあるだろうとは思う // 正直、Visual Studio と Office を // Full UWP にしてから出直してきて… Universal App Package Universal Windows App

Slide 40

Slide 40 text

Desktop App Converter Bridge to the UWP UWP アプリへの 5 つのステップ 将来的に UWP アプリへ移行してほしい (って Microsoft が言ってる) Desktop App Converter は Step 2 までを実現するツール Convert Enhance Extend Migrate Expand

Slide 41

Slide 41 text

Future prospects 個人的には期待している Step 2, Step 3 が一番面白そう 今回間に合わなかったところ 変換されたデスクトップ アプリのデバッグ Visual Studio “15” Preview 2 が必要で環境作れなかった デスクトップ対象に絞れば Desktop + UWP コラボレーションで 良いとこ取りできそう?