ハンズオンMicrosoft のユニバーサル Windows プラットフォーム (UWP) に興味がない人でも、デスクトップ アプリケーションを Windows ストア アプリで使用される Appx 形式に変換できる Project Centennial (デスクトップ アプリ コンバーターとも呼ばれる) には興味があるかもしれません。
Appxパッケージを使ってデスクトップアプリケーションをインストールする機能は、2016年8月にリリースされるWindows 10 Anniversaryの機能です。Appxパッケージを使用する利点は、従来のWindowsセットアップルーチンとは異なり、クリーンなインストールと削除が可能なことです。従来のWindowsセットアップルーチンでは、ファイルを複数の場所にインストールしたり、システムコンポーネントやレジストリエントリを追加したりすることがありますが、これらのエントリは簡単には削除できません。Windowsシステムは、特にアプリケーションのインストールと削除が頻繁に行われるシステムでは、時間の経過とともに動作が遅くなることがよくあります。そのため、このプロセスをより適切に管理できる方法は大きなメリットとなります。
Project Centennial では、現在のプレビューでは機能しませんが、将来的にはストアへの送信も可能になります。
Project Centennialアプリケーションは、真のUWPアプリケーションほど分離されておらず(したがって、セキュリティも低くなります)、オペレーティングシステムに損害を与える可能性のある特定の動作を禁止する制限はあります。
Desktop App Converter をインストールするには、Windows 10 Anniversary のサポート対象プレビュービルドをお持ちの場合、Windows 10 ビルドに対応する Windows イメージファイル (.WIM) と、各種ユーティリティおよび PowerShell スクリプトをダウンロードするだけです。また、Windows 10 SDK も必要です。Desktop App Converter は、軽量な仮想化技術である Windows 10 コンテナーを使用して、対象アプリケーションのクリーンインストールを実行します。その後、システムに加えられた変更をキャプチャし、その結果から appx パッケージを作成します。
シンプルなWindowsフォームアプリケーション(旧式の.NETデスクトップアプリケーション)でデスクトップアプリコンバーターを試してみました。Visual Studio 2015でアプリケーションを作成するのは簡単でしたが、デスクトップアプリコンバーターを使用するにはインストーラーが必要で、インストーラーがないと変換スクリプトを実行できないことがわかりました。そこで、インストーラープロジェクトをサポートする拡張機能をVisual Studioに追加し、基本的なセットアッププロジェクトを作成しました。
コンバータはインストーラを非表示のコンテナ内で起動し、終了するまで待機するため、インストーラはサイレントモードで実行する必要があります。インストーラに渡す引数を指定することは可能ですが、ユーザーにダイアログのクリックやEULAへの同意を求める場合、コンバータは失敗します。
これは Project Centennial を介して実行される Windows Forms アプリケーションですが、変換されていないバージョンとまったく同じに見えるため、私の言うことを信じてもらうしかありません。
何度か失敗を繰り返しましたが、すべてうまくいき、Appxパッケージが完成しました。最後のステップは、Appxに署名することです(私は自分で生成した証明書を使用しました)。そして、PowerShellコマンドAdd-AppxPackageを使ってインストールします。すると、アプリケーションがWindows 10のスタートメニューに表示され、以前と全く同じように動作するようになりました。Windows 10の「プログラムと機能」リストには表示されませんが、アプリケーションのショートカットを右クリックして「アンインストール」を選択することでアンインストールできます。
しかし、すぐにプロセスを改善する方法を見つけました。チュートリアルに従ってDesktop App Converterを実行すると、Appxパッケージの様々な属性を設定する重要なAppManifest.xmlやショートカットに使用されるビットマップなど、多数のファイルが生成され、その後、MakeAppx(Windows 10 SDKの一部)というツールが実行されて最終的なAppxファイルがビルドされます。つまり、Converterの引数を変更して再度実行する以外に、出力を微調整することはできません。
MakeAppx引数なしでコンバーターを実行すると、より柔軟に実行できます。その後、AppManifest.xmlと残りの出力を編集し、MakeAppxを手動で実行できます。
この作業を通して、Desktop App Converterの使用は実際にはオプションであることがわかりました。COM登録、特殊なコピープロテクト、開発者のみが知る理由でファイルを奇妙な場所に配置といった処理を行うインストーラーを使用している場合は、結果のキャプチャにDesktop App Converterを使用することがほぼ必須です。一方、アプリケーションが単一の実行ファイルである場合、またはすべてを独自のアプリケーションフォルダにインストールする場合は、Desktop App Converterをバイパスして、こちらで説明されているようにMakeAppxのみを使用できます。
Project Centennialの中核はApp Converterではなく、デスクトップアプリケーションの実行を可能にするUWPの変更です。AppManifest.xmlを見ると、Capabilityが「runFullTrust」に設定され、EntryPointが「Windows.FullTrustApplication」に設定されていることがわかります。これがWindows 10 Anniversaryの新機能です。
Microsoft Build 2016 の Project Centennial セッションでの発言を思い出しました。それは、Centennial アプリというものは存在せず、UWP には Centennial 拡張ポイントだけがあるというものでした。
現在のツールでは開発者はプレビューを試すことができますが、将来的には多くのインストーラー キットが Appx としてパッケージ化するオプションのみを提供するようになるため、新しいアプリケーションのサポートは、多かれ少なかれボックスをチェックするだけの問題になります。
同じようで違う
アプリケーションを直接実行する場合とは対照的に、Appx に変換されたデスクトップ アプリケーションを実行すると何が変わりますか?
主な違いは3つあります。1つ目は、レジストリと特定のファイルシステムへの呼び出しがリダイレクトされることです。例えば、アプリケーションがWindowsディレクトリやSystem32にファイルをインストールしたり、インストール後にProgram Filesに書き込んだりする場合、それらの呼び出しはアプリケーションフォルダにリダイレクトされます。また、ローカルストレージには、通常のAppDataフォルダではなく、UWP分離ストレージが使用されます。ただし、これらの特別な領域外にあるファイルシステムへの呼び出しは影響を受けません。例えば、Cドライブのルート直下のディレクトリに書き込むことは可能で、以前と同じように動作します。
第二に、これらのアプリケーションは標準ユーザーとして実行する必要があります。管理者として実行することはできません。また、Windowsサービスとして実行することもできませんが、バックグラウンドタスクを実行したり、起動時に自動的に実行したりすることはできます。
3つ目に、UWPのAPI全体が利用可能である一方、デスクトップアプリケーションはUWPのサブセットにしかアクセスできません。これには、ライブタイル、通信を可能にするアプリサービス、共有コントラクトなどが含まれます。デスクトップアプリケーションとして実行され、もう1つは通常のUWPアプリとして実行される、2つのプロセスを持つアプリケーションを作成できます。Microsoftは、開発者が徐々に機能をUWP側に移行し、デスクトップ部分が不要になることを期待しています。ただし、これは長期的な戦略であり、ユーザーにはUWPアプリとして表示しながら、従来のデスクトップコードも使用できるようにするというものです。
プロジェクトセンテニアルの長所と短所
MicrosoftのUWPは、Windows 10のリリース以来、様々な苦難を経験してきました。Windows Phoneの急速な衰退とWindows 7のサポート不足により、「ユニバーサル」という名にふさわしい価値が損なわれ、従来のデスクトップアプリケーションと比較した制限により移植が困難になっています。UWPの開発ツールは、デスクトップアプリの開発ツールに比べてはるかに劣っています。
Project Centennialはこれらの制限のほとんどを取り除き、企業と消費者の両方にとってWindowsエクスペリエンスを向上させる可能性を秘めています。Windows 10ストアには、ユーザーが実際にインストールしたいアプリケーションがより多く配信されるようになり、セットアップと削除がより容易かつ管理しやすくなります。これらのツールを使用してアプリケーションをAppxに移植するのは必ずしも簡単ではありません(制限事項とエッジケースのリストはこちらでご確認ください)。しかし、多くの場合、問題なく動作します。多くの既存アプリケーションに影響を与える1つの問題は、.NETアプリケーションがバージョン4.6.1以上をターゲットにする必要があることです。ただし、奇妙なことに、私の.NET 4.5の例では問題なく動作しました。ただし、コードにアクセスできない場合は問題になります。
もちろん、最大の問題は、Windows 10 Anniversaryより前のバージョンのWindowsのサポートを継続する必要があるかどうかです。これは、デスクトップアプリケーションを2つのわずかに異なるバージョン、つまり従来型インストール版とAppx版に変換したバージョンを維持することを意味する場合があります。
代替案としては、Microsoftの既存のApp-V製品があります。これは、アプリケーションのパッケージ化によって展開を自動化し、依存関係の競合リスクを排除したい企業を対象としています。App-VはWindows 7では問題なく動作しますが、UWPやWindowsストアとは統合されていません。
ある意味、Project Centennial はすべての人のための App-V であり、Windows 10 の展開を検討する確かな理由となります。®