デスクトップ アプリがこの先生 きのこるには //2016 2016/05/21 Madosta #1 / CSUG Manato KAMEYA (@Grabacr07)
Agenda Goal Project Centennial (Desktop App Converter) の概要 Windows Desktop App -> UWP App への移行パス Desktop App Converter が与える影響
Self Introduction 亀谷学人 ( かめやまなと ) 1987 年生まれ 仙台出身 / 東京在住 ソフトウェアエンジニア クライアント設計 / C# / XAML Windows Study Meeting ( まどすた ) staff Microsoft MVP for Visual Studio and Development Technologies 長いよ Twitter: @Grabacr07 Facebook: manato.kameya Blog: http://grabacr.net/
My Apps KanColleViewer 艦これ プレイングツール C# + WPF (.NET Framework 4.6.2) SylphyHorn 仮想デスクトップツールアクティブウィンドウごと移動
//build/ 2015 ~ Windows Bridge の行方
遡ること 1 年前
//build/ 2015 Windows Bridge Windows Store Universal Windows Platform Web.NET & Win32 Android (Java/C++) ios (Objective C)
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)
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) このあと話すやつ
特に続報もなく 時は過ぎる ( その間 @Grabacr07 は迷走 )
Kind of Windows app Classic Desktop app 従来のアプリケーション (.exe で実行するやつ ) 基本的になんでもできる Universal Windows Platform app Windows ストアで配布されるアプリケーション いろんなデバイスで動く
Kind of Windows app Classic Desktop app 従来のアプリケーション (.exe で実行するやつ ) 基本的になんでもできる My Apps WPF, IE Shell, Key hook, etc. やりたい放題系アプリ Universal Windows Platform app Windows ストアで配布されるアプリケーション いろんなデバイスで動く
Distribution アプリの配布をどうするか Classic Windows app の悩みどころ UWP だったら配布はストアにお任せカンタンやりたい放題系なので UWP になるわけがない
Distribution アプリの配布をどうするか Classic Windows app の悩みどころ UWP だったら配布はストアにお任せカンタンやりたい放題系なので UWP になるわけがない KanColleViewer の思い出 公開から 2 年半約 350 万 DL レンサバ追い出されたり ( アクセス過多 ) MSDN 無料枠使い切って課金されたり
TouchMe Gesture Studio 自力解決してるアプリ Windows Store 8.1 + Classic Desktop Project Centennial には頼っていない 主機能 動作エンジンは Classic Desktop app として提供 主機能インストーラー DL 課金 ユーザー設定の UI を Windows Store app として提供
UWP +.NET その手があったか! UWP ( フロントエンド ) +.NET ( エンジン ) はアリなのか? ストアで検索してインストールして設定するまで UWP 実際にバックグラウンドで動作しているのは.NET SylphyHorn app SylphyHorn.exe
UWP +.NET SylphyHorn でやってみた UWP アプリを起動して エンジンのインストーラーをダウンロードさせる
UWP /.NET Bridge 両アプリの繋ぎこみ ストアアプリのデータは %LocalAppData% Packages へ アプリのパッケージ名が判れば保存先が確定する Write Read Read FileSystemWatcher SylphyHorn app Settings.xml SylphyHorn.exe
UWP /.NET Bridge 両アプリの繋ぎこみ await ApplicationData.Current.LocalFolder.GetFileAsync("Settings.xml"); var path = Path.Combine( Environment.GetFolderPath( Environment.SpecialFolder.LocalApplicationData), "Packages", "46846grabacr.net.SylphyHorn_vwznf8jfphrrc", "LocalState", "Setting.xml"); Write Read Read FileSystemWatcher SylphyHorn app Settings.xml SylphyHorn.exe
UWP +.NET 結論 申請通った ( 機械審査 ) bit.ly/sylphyhornapp Project Centennial は生きてるのかわからんし UWP + WPF は存在が許された!
この話をサトヤ仙台で発表 (3 月下旬 ) この数日後に
Project Centennial デスクトップアプリを UWP へ
Project Centennial は生きていた!
Project Centennial UWP パッケージ化 既存の Win32 /.NET アプリを UWP と同じパッケージ化する パッケージ化だけで 中身は元のバイナリのまま なので当然 10 Mobile では動作不可
Desktop App Converter Desktop app -> AppX 変換ツール Windows 10 Insider Preview 14316 で提供開始インストーラーから AppX (UWP 配布パッケージ ) を生成.msi をサイレントモードで動作させ 展開されたファイルをパッケージ化する感じ MSI AppX //build/ 2016 資料から引用
WiX Toolset モダンなインストーラー Windows Installer (.msi) を作る Bootstrapper (.exe) を作る.msi をサイレントモードで カスタム UI を内臓 ( なので WPF 等々ご自由に ) WPF + MVVM library (Livet) + Custom theme (MetroRadiance) やりたい放題!!!
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 ダイアログが青くなった
Desktop App Converter Windows 10 Insider Preview (Fast Ring) 14316 (4/7) Bash 仮想デスクトップ改善 Dark テーマ 14328 (4/22) UI Windows 刷新 (Start 10 Enterprise menu, UAC におけるダイアログがキモい ) Desktop App Converter のサポート 14332 (4/26) あんまり覚えてない 14342 (5/10) UAC ダイアログが青くなった Windows 10 Pro / Enterprise における Desktop App Converter のサポート 14328, 14332 では Desktop App Converter は動作しない (Known issue)
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
Setup the Desktop App Converter セットアップ. DesktopAppConverter.ps1 -Setup ` -BaseImage. BaseImage-14316.wim ` -Verbose 管理者権限で実行 (Setup, Conversion, ぜんぶ )
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
Conversion and Deployment Evernote を UWP パッケージ化 出力先に AppX が生成されている Demo デプロイは AppxManifeset.xml で Add-AppxPackage Add-AppxPackage -Register "C: Users grabacr07 Work Evernote Output AppxManifest.xml"
Benefit of the Desktop App Converter UWP パッケージ化で得られる恩恵 個人開発者 : Windows Store で公開できる & マネタイズ企業 組織 : side loading / MDM が楽に? ( やったことない ) Filesystem / Registry への書き込みをリダイレクト処理 Registry 肥大化の防止クリーンなインストール アンインストール ( ユーザーにとってのメリット )
Bridge to the UWP UWP アプリへの 5 つのステップ Convert Enhance Extend Migrate Expand
Bridge to the UWP Step 1: Convert Desktop app (.msi) から UWP (.appx) を作成 & デプロイ Universal App Package Classic Windows App Windows Store への提出 シームレスなアップデート クリーンなアンインストール
Bridge to the UWP Demo Step 2: Enhance Desktop app 内部から UWP の API を呼び出し Universal App Package Classic Windows App ライブタイルのサポート Actionable Notifications ( トースト通知操作 ) Cortana Universal Windows API 他いろいろ
Bridge to the UWP Demo Step 3: Extend UWP App Service や Background tasks 等の機能追加 UWP App と Desktop App の共存 エントリーポイントは UWP App 側へ 両者は App Service で通信 Universal App Package Classic Windows App Universal Windows App フロントエンドを XAML / コアを Win32 とか File Picker UI
Bridge to the UWP Step 4: Migrate UWP 成分増やしていこうな がんばろう Universal App Package Classic Windows App Universal Windows App
Bridge to the UWP Step 5: Expand すべてのコードを UWP で Universal App Package 様々な Windows デバイスへ ここまでできないアプリも それなりにあるだろうとは思う Universal Windows App // 正直 Visual Studio と Office を // Full UWP にしてから出直してきて
Bridge to the UWP UWP アプリへの 5 つのステップ 将来的に UWP アプリへ移行してほしい ( って Microsoft が言ってる ) Desktop App Converter は Step 2 までを実現するツール Convert Enhance Extend Migrate Expand Desktop App Converter
Future prospects 個人的には期待している Step 2, Step 3 が一番面白そう デスクトップ対象に絞れば Desktop + UWP コラボレーションで良いとこ取りできそう? 今回間に合わなかったところ 変換されたデスクトップアプリのデバッグ Visual Studio 15 Preview 2 が必要で環境作れなかった