自作WindowsフォームアプリでDAC(Desktop App Converter)を試す

はじめに

Windows 10にはDAC(Desktop App Converter)が提供されています。
デスクトップアプリをUWP(Universal Windows Platform)アプリに変換するツールです。
デスクトップアプリのUWP化に大いに寄与するツールなわけで、Windows 10に興味がある(わけではないのだが、仕事上必須である・・・)者としては、ぜひ試してみようと思った次第なのです。

マイクロソフトによる解説「Desktop to UWP Bridge: Desktop App Converter」があります。ここにDAC化の方法が書いてありまして、読みながら試してみることにしました。

DAC化するのは、自作のWindowsフォームアプリ「るとるのメモ帳(SimpleRMemo)」です。
というか、はじめからDACを試したくて、このアプリを作ったのでした。




↓続き読んでね。

環境

私の環境は以下のとおりです。

・MacBook Pro (Retina, 13-inch, Late 2013)
・macOS Sierra
・VMware Fusion Version 8.5.3

の上で、

・Windows 10 Professional Build 15063(Creators Update)

を使っています。
ちなみに、Insider Previewに参加中。Creators Updateが出たばっかなので、Slow Ringにしています。

DACシステム要件

「Desktop to UWP Bridge: Desktop App Converter」によると以下の通り。

・Windows 10 Anniversary Update (10.0.14393.0 以降) Pro または Enterprise エディション
→Professionalを持っているので問題なし。
・64 ビット (x64) プロセッサ
・ハードウェア支援による仮想化
・Second Level Address Translation (SLAT)
→こちらは2に書いたとおりの仮想環境でしたが、問題なく動きました。

事前準備とDACのインストール

私は既にWindows 10を「開発者モード」にしていたので特に変更は無し。
Visual Studio 2017も入れていました。
DACはWindowsストアからインストールします。ストアで検索すれば出てきます。

1

インストールが完了したらDACを管理者モードで起動します。右クリックで選んで起動ですね。

2

DAC実行

以下を実行。
今回は、シンプルにexeファイルからUWP化することにしました。Visual Studioで保存されるexeファイルをC:¥Installer¥MyAppにコピーしておきます。

PS C:¥WINDOWS¥system32> DesktopAppConverter.exe -Installer C:¥Installer¥MyApp¥ -AppExecutable
SimpleRMemo.exe -Destination C:¥Output¥MyApp -PackageName "SimpleRMemo" -Publisher "CN=Rutoru"
 -Version 0.0.0.1 -MakeAppx -Sign -Verbose

すると、以下のように色々と出力されて終了。

詳細: Log file can be found in
C:¥DesktopAppConverter¥946b9efe-a045-4cf4-9aa0-43a048a1a4fa¥logs¥DesktopAppConverter.log
詳細: Desktop App Converter
2.0.2.release_2017-04-20_15-32_d5d861e622cd5bd166242b726909575b22b31f27
詳細: --------------------------------------------------


Checking Prerequisites

詳細: Checking Windows Version to ensure it meets minimum requirements
詳細: Minimum Windows Version requirement is met.
詳細: Checking if Microsoft Windows 10 SDK is installed
詳細: Checking Windows SDK version to ensure it meets minimum requirements.
詳細: The installed Windows SDK version 10.0.15063.137 is supported
詳細: Checking if MAKEAPPX.exe is available in the Microsoft Windows 10 SDK tools
詳細: Checking if SIGNTOOL.exe is available in the Microsoft Windows 10 SDK tools
詳細: Checking if MAKEPRI.exe is available in the Microsoft Windows 10 SDK tools
詳細: Ensuring the provided Installer (C:¥Installer¥MyApp¥) exists
詳細: --------------------------------------------------


Validating inputs

詳細: Checking if Destination (C:¥Output¥MyApp¥SimpleRMemo) exists
詳細: C:¥Output¥MyApp¥SimpleRMemo does not exist. Creating it...
詳細: Ensuring that this script has write permissions to C:¥Output¥MyApp¥SimpleRMemo...
詳細: Ensuring that the provided AppExecutable 'SimpleRMemo.exe' is a '.exe'
詳細: Copying loose package files to C:¥Output¥MyApp¥SimpleRMemo¥PackageFiles
詳細: --------------------------------------------------


Initializing AppxManifest.xml

詳細: Attempting to set appx manifest property 'Package.Identity.Name' to 'SimpleRMemo'.
詳細: Attempting to set appx manifest property 'Package.Identity.Publisher' to 'CN=Rutoru'.
詳細: Attempting to set appx manifest property 'Package.Identity.Version' to '0.0.0.1'.
詳細: No value provided for appx manifest property
'Package.Properties.PublisherDisplayName'. Attempting to set it to the default value
'Rutoru'
詳細: Attempting to set appx manifest property 'Package.Properties.PublisherDisplayName' to
 'Rutoru'.
詳細: No value provided for appx manifest property 'Package.Properties.DisplayName'.
Attempting to set it to the default value 'SimpleRMemo'
詳細: Attempting to set appx manifest property 'Package.Properties.DisplayName' to
'SimpleRMemo'.
詳細: No value provided for appx manifest property
'Package.Applications.Application.VisualElement.Description'. Attempting to set it to the
default value 'SimpleRMemo'
詳細: Attempting to set appx manifest property
'Package.Applications.Application.VisualElement.Description' to 'SimpleRMemo'.
詳細: No value provided for appx manifest property
'Package.Applications.Application.VisualElement.DisplayName'. Attempting to set it to the
default value 'SimpleRMemo'
詳細: Attempting to set appx manifest property
'Package.Applications.Application.VisualElement.DisplayName' to 'SimpleRMemo'.
詳細: No value provided for appx manifest property 'Package.Applications.Application.Id'.
Attempting to set it to the default value 'SimpleRMemo'
詳細: Attempting to set appx manifest property 'Package.Applications.Application.Id' to
'SimpleRMemo'.
警告: DesktopAppConverter : warning 'W_ANYCPU_FORCING_64_BIT_APPLICATION': Managed
executable 'C:¥Output¥MyApp¥SimpleRMemo¥PackageFiles¥SimpleRMemo.exe' can run as a 32-bit
or 64-bit application. Forcing 64-bit application package for converter compatibility. Use
the '-PackageArch x86' command line parameter to create a 32-bit application package
instead.
詳細: Saving manifest...
詳細: --------------------------------------------------


Processing application assets

詳細: Extracting icons from app executable file to use as application assets
詳細: Indexing Assets into resources.pri
詳細: Resource file creation complete.
詳細: --------------------------------------------------


Making Final Appx Package

詳細: Appx creation complete. Find it at C:¥Output¥MyApp¥SimpleRMemo¥SimpleRMemo.appx
詳細: --------------------------------------------------


Signing Appx Package

詳細: Appx Signing complete. Find it at C:¥Output¥MyApp¥SimpleRMemo¥SimpleRMemo.appx.
Install auto-generated certificate before deploying it
詳細: Conversion complete. Your converted application is located at
C:¥Output¥MyApp¥SimpleRMemo.
Warning Summary:
W_ANYCPU_FORCING_64_BIT_APPLICATION
Managed executable 'C:¥Output¥MyApp¥SimpleRMemo¥PackageFiles¥SimpleRMemo.exe' can run as a 32-bit or 64-bit application. Forcing 64-bit application package for converter compatibility. Use the '-PackageArch x86' command line parameter to create a 32-bit application package instead.


Output Paths:

Name                           Value
----                           -----
CertPath                       C:¥Output¥MyApp¥SimpleRMemo¥auto-generated.cer
PackageFilesPath               C:¥Output¥MyApp¥SimpleRMemo¥PackageFiles
PackagePath                    C:¥Output¥MyApp¥SimpleRMemo¥SimpleRMemo.appx
LogFilesPath                   C:¥Output¥MyApp¥SimpleRMemo¥logs

アプリの展開

PS C:\Output\MyApp\SimpleRMemo\PackageFiles> Add-AppxPackage -Register .\AppxManifest.xml

これでスタートメニューに登録されます。
以下の図の左上参照。

4

動作確認

起動も無事に成功。

5

もともと、フォントやウィンドウの場所をレジストリに登録する作りだったので、フォームアプリとして起動すると、

3

のように、レジストリに登録されたのですが、UWP化されると、

6

と、レジストリを汚すことはありませんでした。

最後に

「Desktop to UWP Bridge: Desktop App Converter」を読むと、未だ色々と問題があるようです。しかし、いずれWindowsアプリはすべてUWP化されるのではないか、と予感させるようなツールでありました。
UWPはサンドボックス化されていて、セキュリティ面でもいいわけでして、従来からのアプリのUWP化に寄与するツールであり、成熟に大いに期待します。




Leave a Reply

Your email address will not be published.