Desktop App Converter について

Desktop App Converter とは、デスクトップのアプリを UWP アプリのパッケージ (APPX) へと変換するツールになります。このツールが発表されたのは、2015 年の Build Conference であり、2016 年の Build Conference の後にプレビュー ツールが公開されました。Desktop App Converter の最新版は、ダウンロード センターより入手することができ、2016 年 6 月 8 日時点では 0.1.15 であり、Windows Insider の Build 14352 に対応しています。このツールを用いた作業は、以下のような手順で進みます。

  1. 環境設定
    Powershell の実行ポリシー設定を行ってから、ベース イメージの展開を行います。この作業には、Windows の機能として「コンテナ」が必要になります。
    コンテナを有効にしないで、「.\DesktopAppConverter.ps1 -Setup -BaseImage .\BaseImage-14352.wim」コマンドを実行すると、最初にコンテナを有効化にしてから、リブートとなります。リブートした後にサインインすると、ベース イメージの展開が自動的に始まります。
    この作業は、環境設定ですので一度だけ実施すればよいものになります。

  2. アプリの変換
    アプリを変換するには、MSI パッケージか独自のセットアップ プログラムが必要になります。独自のセットアップ プログラムの場合は、セットアップの Exit Code が「0(ゼロ)」になっているかどうかをご確認ください。もし、Exit Code がゼロ以外の場合は、「-InstallerValidExitCodes」オプションを使って Exit Code を指定してください。秀丸エディタの hmsetup.exe の場合は、Exit Code が「1」ですから、「「-InstallerValidExitCodes 1」と指定する必要があります。
    また、アプリを変換するコマンドを実行する場合は、ネットワークに接続されている必要がある点にもご注意ください。

  3. アプリへの機能追加

    変換した APPX レイアウトは、元のプログラムをインストールした時と同じ環境が作成されています。このままでは、APPX のアイコンなどが SDK が用意した既定のアイコンなので、アプリ用のアイコンにする必要があります。
    また、Visual Studio 15 プレビューDesktop to UWP Packaging VSIX Project を用意することで、Windows ランタイム の API を呼び出すコードを追加したり、Visual Studio のステップ実行などのデバッグを行うこともできるようになります。

アプリの変換作業について

アプリを変換する作業のログは、「C:\DesktopAppConverter」フォルダに記録されています。このログを確認していると、次のようなステップで作業を行っていることがわかります。

  • 事前条件のチェック
  • パラメータのチェック
  • 変換環境の準備
  • AppxManifest.xml のスケルトンの作成
  • コンテナ上の隔離環境に対してアプリのインストール
    外部のネットワーク接続がダウンしていると、ここでエラーが発生します。de:code 2016 の控室で何度か発生してしまい、困り果ててしまいました。
  • 仮想レジストリの構築
  • 仮想ファイル システムの構築
  • AppxManifest.xml を最終系にする。
  • APPX レイアウトを「-Destination」オプションで指定したフォルダへ出力します。
  • 「-MakeAppx」オプションが指定されていれば、Windows 10 SDK に含まれる「MakeAppx.exe」を使用して APPX パッケージを作成します。
    Appxの作成ログは、MakeAppx.log というファイルに記録されます。

アプリの変換後に、アプリのタイルなどの入れ替え作業がありますので、「-MakeAppx」オプションを指定する必要はないと言えます。また、現在のバージョンでは、ファイルの拡張子の関連付け情報なども収集されますので(Build 2016 で使用されたプレビューでは、手作業で関連付けを AppxManifest.xml に登録する必要がありました)、基本的な作業は変換ツールが行うようになっています。

Windows ランタイム API を呼び出すには

変換アプリのプロジェクト ファイルを「マネージ デスクトップと UWP」に従って、編集する必要があります。この作業を行って、必要な Windows メタデータや .NET Core のアセンブリへの参照を行えば、コードを記述することができます。これらの作業が「変換済みの UWP アプリを展開してデバッグする 」の「また、UWP 用アプリケーションは更新するが Win32 用にはそのままビルドする場合は、特定のコード パスを有効にする条件付きコンパイルを使うこともできます。」段落の「DesktopUWP コンパイル条件」で説明しています。

変換したアプリは、UWP アプリと呼ぶものになりますが、実行できるデバイス ファミリが「Windows.Desktop」のみになります。
DesktopAppConverter

この図にあるように、Windows ランタイム API を呼び出すことができますので、UWP アプリが動作する AppContainer との通信チャネルが内部的に利用できる状態になっています。de:code 2016 では、この機能を使って Windows.Photo アプリの clop プロトコルを使って連携できることをお見せしました。

アプリのインストールとアンインストール時の現時点での制限事項

アプリのインストールは、特に問題ありませんが、アンインストールや Visual Studio 15 でのデバッグ時に問題が発生する場合があります。この理由は、インストール済みのアプリを起動すると、ユーザー プロファイルの Packages フォルダ内に作成されるローカル ストア内のフォルダーが使用中になるためです。この理由から、Visual Studio 15 でエラーが発生した場合や、アンインストール前に OS の再起動をお勧めします。OS が再起動されれば、フォルダーの使用が解放されますので、アプリのアンインストールを正常に行うことができます。もし、再起動する前にアンインストールをした場合は、OS を再起動してからユーザー プロファイルの Packages フォルダ内に作成されるローカル ストア を手動で削除してください。これは、現時点のプレビューにおける制限事項になります。

Insider Preview を更新した場合の注意点

Windows Insider Preview が Fast Ring などで新しいビルドになる場合があります。この場合は、ダウンロード センターより新しいビルドに対応したベース イメージがリリースされていないかをご確認ください。OS のビルドに合わせた、ベース イメージが必要になります。新しいベース イメージが入手できましたら、ベース イメージのセットアップを行います。現在までの Insider Preview を更新した場合に発生している問題は、ベース イメージのセットアップ中に仮想ネットワークでエラーが発生することです。エラーが発生した場合は、Windows の機能で「コンテナ」と「Hyper-V」を無効化してから、「有効化」をやり直した後に、ベース イメージのセットアップを行ってください。現時点では、この作業でベース イメージのセットアップは正常にできることを確認しています。

まだ、Desktop App Converter は開発途中ですから、問題を見つけました「User Voice」へフィードバック をお願いします。皆様のフィード バックによって、より良い製品になりますので、是非とも評価をお願いします。