従来のアプリをWindows 10のUWPアプリ形式にパッケージングする「Desktop App Converter」

開発担当の橋本孔明です。

昨年の本ブログの記事「プログラマから見たWindows 10 #3 ~UWP Bridgeとは」で、Windows 10 のUWPアプリを拡充するためのMicrosoftの取り組みのひとつ「Project Centennial」と呼ばれるテクノロジーを紹介しました。
これは、既存のWin32 APIや.NET Frameworkで書かれた通常のデスクトップ アプリを、Windows 10のUWP(Universal Windows Platform)アプリ形式にパッケージングし、Windows ストアへの登録を可能にするというものでした。

この技術は「Desktop App Converter」という正式名称を得た上で、ながらくβテストが行われていましたが、先日ついに正式版としてWindows ストア上での配布が開始されました。

今回はこのDesktop App Converterを簡単ながら触ってみたいと思います。

注意しておきたいこと

Microsoftの説明だけではDesktop App Converterが万能のソリューションのように見えてしまいがちですが、実際にはいろいろな制約があります。

変換したアプリは、デスクトップ版Windows 10でのみ動作します。

Xbox版Windows 10、Windows 10 Mobile、Windows 8.1以前などでは動作しません。
なお、32bit版のWindows 10ではうまく動作しない場合もあるようで、検証を進めています。

「変換するとUWPアプリになる」という主旨の説明がなされることもありますが、単純に変換しただけでUWPプラットフォームのAPIを全面的に使うようになるわけではありません。

基本的には元となるWin32 APIや.NET Frameworkの機能を使ったままでの動作となりますが、アプリ自体のコードを修正し、部分的にUWPの機能を使うよう改修していくことも可能なようです。

変換しようとするアプリには特定の条件をクリアしたインストーラーが必要です。

MSI形式でインストーラーが用意されているか、EXE形式で完全サイレント インストール(ユーザーへの問い合わせやエラー メッセージなどのユーザー インターフェースが一切表示されないモード)に対応したインストーラーが必要です。

変換したアプリは、Windowsによって一部の処理が制限された動作となります。

レジストリへの書き込み、AppData以下のデータ フォルダへの書き込みなどはリダイレクトされ、各アプリごとに用意される専用のローカル ストレージに保存されます。

システムに重要な変更を加えるようなAPIの一部は使用が制限され、呼び出しても動作しなくなっているようです。このため、深いレベルでシステムの設定を変更したり、他の特定のアプリに影響を与えるような操作は原則として行うことができません。

また、アプリをアンインストールするとアプリ用のローカル ストレージも削除されるため、いわゆる「システムを汚す」ということがほとんどありません。

 

下準備

Desktop App Converterを使用するためには以下のものが必要です。なお、今回はあくまで正式版のレビューということで、β版やプレビュー版などのコンポーネントは記載していません。

また、本記事公開時点ではWindows 10正式版の最新ビルドは「14393」ですが、Insider Previewを使用したり、将来新しい正式版がリリースされた後に本記事を参照される際は、下記コンポーネント類のビルド番号をすべて同一のものに合わせるようにしてください。

Windowsのバージョン情報

「winver」コマンドでWindowsのビルド番号を調べることができます

「Windows 10 SDK」はVisual Studio 2015にも含まれますので、そちらでWindowsアプリの開発を行っている場合は別途インストールは不要です。

「Windows 10 Base Images」とはWindows 10のコンテナー機能が利用する、いわば仮想化したOSのイメージ ファイルで、Desktop App Converterがアプリを変換する際に使用されます。

セットアップ

まずWindows 10 SDKをインストールしておきます。
次に、Windows ストアで「Desktop App Converter」を検索・インストールします。

Desktop App Converter

Desktop App ConverterはWindows ストアに登録されています(クリックで拡大)

Desktop App ConverterはWindows PowerShell上で動くスクリプトを中心に構成されているため、実行するとPowerShellのウィンドウが開き、そちらからコマンドラインを指定することで各種の処理を行っていく形態となります。

なお、ショートカットは「管理者権限」で実行する必要がありますので注意してください。右クリックから「その他」-「管理者権限で実行」を選択します。

Desktop App Converterエラー画面

Desktop App Converterをそのまま起動するとエラーが表示されます(クリックで拡大)

管理者権限で実行

Desktop App Converterを管理者権限で実行します

Desktop App Converterを使えるようにするためには、ストアからのインストール後、Windows 10 Base Imagesを指定してセットアップ処理を行う必要があります。

あらかじめ入手したイメージ ファイル(拡張子.wim)を適当なところ(ネットワーク ドライブはセキュリティの関連で不可なようです)に置いておき、上述の手順で起動したPowerShellで以下のコマンドを実行します。(この例ではイメージファイルをC:\に置いています)

Desktop App Converter.exe -Setup -BaseImage C:\BaseImage-14393.wim

処理には少し時間がかかりますが、うまくいけばエラー メッセージが表示されることなく、次のコマンドを受け付ける状態に戻ります。

サンプル アプリの用意

今回は動作検証用として簡単なサンプル アプリを用意しました。

このアプリはウィンドウを1枚開き、中にはエディット ボックスが3つ表示されます。それぞれ上から順に、

  1. レジストリ(HKEY_CURRENT_USER\SOFTWARE\Desktop App Converter Test App 下のStringValueという値)
  2. AppDataフォルダ配下のファイル(C:\Users\ユーザー名\AppData\Roaming\Desktop App Converter Test App\StringValue.txt)
  3. ドキュメント フォルダ配下のファイル(C:\Users\ユーザー名\Documents\DACTest.ini)

に文字列を記憶するようになっています。変換前のアプリを単体実行すると、上記のレジストリ データやファイルが生成されることを確認できます。

今回用意したサンプル アプリ

今回用意したサンプル アプリ

次に、このアプリをインストール パッケージにします。

インストーラーとしては弊社製品の「EXEpress」を使用していますが、現在公開されているEXEpressは、Desktop App Converterが必要とする、サイレント モードをサポートしたインストーラーを作ることができません。ウィザード無しで自動実行するモードはあるのですが、設定によってはユーザーへの確認(ファイル上書きなど)や処理失敗時のエラー メッセージが表示されます。

そこで、本記事では、完全なUI無しのサイレント モードをサポートした特別版のEXEpressを用意し、それを使用しています。なお、この機能については仕様を吟味の上、今後公開予定のEXEpress新バージョンにおいて正式サポートを予定しています。

2017年4月12日追記

サイレントモードは、EXEpress 6 バージョン6.20 以降でサポートしています。詳しくはこちらのブログ記事「【EXEpress 6】バージョン6.20で追加・強化された機能」をご覧ください。

インストーラーの設定については標準的なものを採用しています。Program Filesフォルダ下の「Desktop App Converter Test App」をインストール先として指定し、スタート メニューへのショートカット登録を行っています。

できあがったインストーラー パッケージ(自己解凍実行ファイル)は「DACTestSetup.exe」という名称にしておきました。

変換を実行してみる

今回は、インストーラー パッケージ「DACTestSetup.exe」を「C:\DAC_Src」に配置しておきました。
インストーラー パッケージと同じ場所にあるファイルはすべて作業用の一時フォルダにコピーされますので、インストーラーの関連ファイルだけを入れた専用のサブフォルダを作り、そこに置くようにしてください。

また、変換したアプリは「C:\DAC_Out」サブフォルダに出力させたいと思います。
アプリのパッケージ名は「DACTestApp」、正式名称は「Desktop App Converter TestApp」、配布元名称は「Web Technology Corp.」、バージョンは「1.0.0.0」とそれぞれ決定しました。

以上の設定を使う場合、Desktop App ConverterのPowerShellウィンドウから以下のコマンドを実行することで変換を開始します。パラメータは他にもいろいろなものがあるようなので、必要に応じてMicrosoftの情報を参照してください。

https://msdn.microsoft.com/windows/uwp/porting/desktop-to-uwp-run-desktop-app-converter

Desktop App Converter -Installer C:\DAC_Src\DACTestSetup.exe -Destination C:\DAC_Out -PackageName “DACTestApp” -AppDisplayName “Desktop App Converter TestApp” -Publisher “CN=Web Technology Corp.” -Version 1.0.0.0 -MakeAppx -Verbose

変換が成功すると、「C:\DAC_Out\DACTestApp」に「logs」フォルダ、「PackageFiles」フォルダ、「DACTestApp.appx」の3アイテムが生成されます。それぞれログファイルの出力先、パッケージ前のファイル群、アプリ パッケージ本体となります。

Desktop App Converterで変換したアプリは、EXEファイルのアイコン リソースではなく、外部のPNGファイルでアイコンを指定します。

標準では「PackageFiles\Assets」に44ドット・50ドット・150ドットの3つのPNGファイルが生成されていますので、これを適切なアイコン画像データに置き換えてください。

また、今回は扱っていませんが、アプリへのファイル拡張子の関連付けなどを行いたい場合、パッケージ フォルダ内の「AppxManifest.xml」にエントリを追加することで実現できます。

アイコン

今回はサイズごとの用途の違いがわかるよう、サイズを文字で入れたアイコンに差し替えました

アイコンを置き換えたら再度パッケージングを実行します。Windows 10 SDKのインストール先(C:\Program Files (x86)\Windows Kits\10\bin\x86)に「MakeAppx.exe」というツールがありますので、コマンド プロンプトでこのフォルダに移動し、以下のように実行します。

なお、新たな.appxを生成する前に、元々あった古い.appxは削除しておいてください。

MakeAppx pack /v /h SHA256 /d “C:\DAC_Out\DACTestApp\PackageFiles” /p “C:\DAC_Out\DACTestApp\DACTestApp.appx”

システムへの登録と実行

変換したアプリはWindowsへの登録を行うことで実行可能となりますが、.appxそのものは署名を行わないかぎり登録に使用することができません。登録には証明書の手配などの手順が必要となるため今回は省略し、パッケージ前のファイル群を直接登録してみます。

Desktop App ConverterのPowerShellウィンドウに以下のコマンドを指定してください。

Add-AppxPackage -Register C:\DAC_Out\DACTestApp\PackageFiles\AppxManifest.xml

これでスタート メニューに「Desktop App Converter TestApp」が登録され、アイコンもさきほど差し替えたPNG画像になっていることが確認できます。

img21なお、PackageFilesフォルダ内のファイルがアプリとしてそのまま使われますので、アプリを試している間は削除しないようにしてください。

登録されたアプリは、スタート メニューのショートカットを右クリックして「アンインストール」を行うことで削除できますが、その際にはスタート メニューへの登録とローカル ストレージが削除されるのみで、上記のパッケージ元ファイルはそのまま残ります。

アプリの実行

スタート メニューからアプリを起動してみます。表示されるウィンドウの外見は、アプリ化前に単体で実行したときと何も変わりありません。

動作の違いとしては、レジストリおよびAppDataフォルダ配下のファイルが作成されなくなっています。これはアプリのローカル ストレージにリダイレクトされているためです。反面、ドキュメント フォルダ配下のファイルについては通常通り作成されています。ドキュメント フォルダはリダイレクトの対象ではなく、通常のファイル操作が行えるようになっているためです。

img22_thumb

この他、単体実行した場合との違いとしては、タスクバーの表示アイコンが設定したアイコンに変わっている点と、タスクバー アイコンの右クリック メニューの最上段にある別のインスタンスを起動する部分の表記が違っている点、および「タスク マネージャー」の「アプリの履歴」に表示されるようになっている点などが挙げられます。今回はすべてを確認できていませんが、その他にもいろいろな違いが生じているはずです。

アプリの履歴

基本的にUWPアプリのみが登場する「アプリの履歴」に入っていることがわかります

タスクバー上の見た目

タスクバー上での見た目が少々異なっています

ストアへの登録

ストアへの登録は、これまでのUWPアプリの登録プロセスと変わりありません。UWPアプリではVisual Studioから直接アップロード、あるいは生成された.appxをアップロードしていたと思いますが、今回は変換して生成された.appxをアップロードすることになります。

ひとつ注意事項として、ストア登録前にDesktop App Converterを使っていることをMicrosoftに申請し、メンバーシップ登録を行う必要があるようです。これは下記のURLから申請することができます。

https://developer.microsoft.com/en-us/windows/projects/campaigns/desktop-bridge

終わりに

Desktop App Converterを使用する最大のメリットは、やはりWindows ストアへの登録が可能になる点かと思います。システムを汚さないことが保証されていることと、Microsoftの審査が入ることで、新たなアプリを導入することに対するユーザーの抵抗感も軽減されます。

また、アプリの配布を有料に設定することも可能ですので、基本的に自前で課金システムやライセンス管理を行う必要も無くなります。配布対象はUWPアプリに比べて狭まりますが、既存のソフトウェア資産を(ほぼ)そのまま新たなマーケットに投入できるということで注目に値するのではないでしょうか。

タグ , , , , | 2022/08/30 更新 |