WPF とかで作ったアプリは、そのままではストアから配布できません。 ストア対応したかったら UWP でアプリを作りましょう!!というのが一応基本スタンスです。 (UWP が現状流行ってるのかは置いておいて、Windows 10 ネイティブなアプリケーション開発は UWP でやるのが一応第一選択肢です)
まぁそうはいっても…という状況で活躍するのが Desktop Bridge ですね。ということで見てみましょう。
Desktop Bridge
ドキュメントがしっかりしてるので、そこを見るのが正です。
デスクトップ ブリッジ - UWP app developer | Microsoft Docs
まだ、にわかなので間違ってること書いてるかもしれませんが、登場当初は msi 形式のインストーラを appx に変換するぜ!みたいな雰囲気で登場したと思います。まぁでも、実態は AppxManifest.xml がちゃんとあって、exe を同梱して appx にパッケージングすればストアに上げることが出来るっぽいですね。
ちなみに、Desktop Bridge で変換したものをストアに上げたい!って思ってる人はここのフォームから申請するとプロセスがスタートします。
Desktop Bridge Sign Up Form - Windows app development
Desktop App Converter
Desktop App Converter を使うと、簡単に msi 形式のインストーラーや実行形式の exe を appx にパッケージングしてくれたり AppxManifest.xml を生成してくれます。便利なので、まずはこれを足掛かりにやってみるのがいいのかなと感じています。
セットアップは Desktop App Converter をストアから仕入れて自分の OS のバージョンとあった BaseImage をダウンロードしてきてコマンドを叩くという感じです。ここらへんに書いてあります。(BaseImage のダウンロードは msi 形式のインストーラーを Desktop App Converter で変換するときに使うので msi じゃない場合はいらないですね)
Desktop App Converter を使用してアプリをパッケージ化する (デスクトップ ブリッジ) - UWP app developer | Microsoft Docs
注意点としてアップデートをきちんとあてている Creators Update の Windows 10 を使ってると対応する BaseImage-15063 を入れるのではなく BaseImage-15063-UPDATE というのを入れないとダメってところですかね。
zip で配ってる感じのアプリを変換してみよう
つまり、よくあるフリーソフトみたいな感じのやつですね。 インストーラーがない形式です。zip をダウンロードして任意の場所に展開して、その中にある exe を起動する感じで使うアプリになります。
例えば DacApp フォルダ以下に DacApp.exe というファイルがあって、それを実行すれば動くアプリの場合は以下のようなコマンドで appx にできます。
DesktopAppConverter.exe -Installer .\DacApp -AppExecutable DacApp.exe -Destination c:\Work\dacsample-noinstaller\Output -PackageName "DacApp" -Publisher "CN=okazuki" -Version 0.0.0.1 -MakeAppx -Sign -Verify
パラメータの意味は以下を参照するといいです。
Desktop App Converter を使用してアプリをパッケージ化する (デスクトップ ブリッジ) - UWP app developer | Microsoft Docs
インストーラー形式のアプリを変換してみよう
とりあえず WPF のアプリを作って Microsoft Visual Stduio 2017 Instalelr Projectsを入れてセットアッププロジェクトを作って msi 形式にパッケージングしてみました。別に msi 形式じゃなくてもサイレントインストール可能なら何でもいいです。
この Installer Projects で作った msi 形式のインストーラーは /qn 引数でサイレントインストールできるみたいなので、Desktop App Converter のマニュアルに従い以下のようなコマンドをぱちぱちと叩くことで appx にパッケージングして適当な証明書で署名してくれます。
DesktopAppConverter -Installer .\DacApp.Setup.msi -InstallerArguments "/qn" -Destination .\Output -PackageName DacApp -Publisher "CN=okazuki" -Version 0.0.0.2 -MakeAppx -Sign -Verify
マニュアルはこちら。(再掲)
Desktop App Converter を使用してアプリをパッケージ化する (デスクトップ ブリッジ) - UWP app developer | Microsoft Docs
インストールして実行してみよう
こんな感じのものが Output フォルダの下に作られます。
生成された appx はダブルクリックすることでさくっとインストールできそうな雰囲気を醸し出しつつ失敗します。これはローカル コンピューターの信頼されたルート証明機関に auto-generated.pfx をインストールしてやる必要があります。やですね。 インストールの過程でパスワードを求められるのですが、これは 123456 になります。
証明書をインストールしたら気を取り直して appx を起動するとこんな感じの画面が出ます。
インストール後起動するとこんな感じ。
いいね!!
再パッケージ
Desktop App Converter での変換は毎回しなくてもよくて、なんかインストール時に書き込むレジストリが変わっただとかいう影響のでかい変更しない限りは必要ないみたいです。
では、どうやって appx を作るのか?ですが makeappx.exe を使ってやります。
出力先として指定したフォルダに PackageFiles というフォルダが出来てるので、そこのファイルを更新したら makeappx.exe で appx に固めるといった感じです。makeappx.exe は以下のフォルダにあるのでパスを通しておくとスムーズかもしれません。
- x86: C:\Program Files (x86)\Windows Kits\10\bin\x86\makeappx.exe
- x64: C:\Program Files (x86)\Windows Kits\10\bin\x64\makeappx.exe
こんなコマンドで再パッケージングできます。
makeappx.exe pack /d .\PackageFiles /p DacApp.appx /l
appx が出来たらインストールできるように署名しましょう。署名はここにドキュメントがあります。
Desktop App Converter が生成してくれる auto-generated.pfx を使う場合は以下のようなコマンドで OK です。
signtool sign /fd SHA256 /a /f .\auto-generated.pfx /p 123456 .\DacApp.appx
Windows 10 S でのテストも忘れずに
これは Desktop Bridge の要件ではなく Windows ストアの要件なんですが Windows 10 S で動くことが必須みたいですね。
デスクトップ ブリッジ - UWP app developer | Microsoft Docs
Windows ストアにアプリを公開する場合は、Windows 10 S を実行するデバイスでアプリが正しく動作することを確認してください。これは、ストア要件です。 「Windows アプリの Windows 10 S 対応をテストする」をご覧ください。
Windows 10 S ですがサイドローディング禁止です。じゃぁどうやってテストするの?ということになりますが、Windows 10 Pro になんかポリシーみたいなのあてて疑似的にやる感じみたいですね。
ちなみに仮想マシンでやることを強くおすすめされてます。(まぁ普通のアプリインストールできなくなるしね…)
Test your Windows app for Windows 10 S - UWP app developer | Microsoft Docs
具多的にはダウンロードできる zip の SiPolicy_DevModeEx_Enforced.p7b を SiPolicy.p7b にリネームして C:\Windows\System32\CodeIntegrity において再起動するだけみたいですね。
そうすると、zip に同梱されてる AppxTestRootAgency.pfx で署名した appx がインストールできるようになるみたいです。署名するにあたり AppxManifest.xml の書き換えが必要です。
Identity の Publisher を CN=Appx Test Root Agency Ex にする必要があります。例えば私の場合 Desktop App Converter で okazuki としたので CN=okazuki と記載されています。
<Identity Name="DacApp"ProcessorArchitecture="x64"Publisher="CN=okazuki"Version="0.0.0.1" />
こんな感じにします。
<Identity Name="DacApp"ProcessorArchitecture="x64"Publisher="CN=Appx Test Root Agency Ex"Version="0.0.0.1" />
そしたら makeappx.exe で appx にパッケージングします。そして signtool で署名しておきます。
makeappx.exe pack /d .\PackageFiles /p DacApp.appx /l signtool sign /fd SHA256 /a /f .\AppxTestRootAgency.pfx .\DacApp.appx
ポリシーあてた Windows 10 Pro でも無事インストールして起動できました。
ちなみに、AppxTestRootAgency.pfx 以外の証明書で署名した appx を用意して pfx を信頼されたルート証明機関に追加するとインストールまでは成功しますが起動しようとすると以下のような感じになります。
まとめ
とりあえず Desktop Bridge の入り口である変換の部分を紹介しました。Desktop Bridge 自体は秀丸エディタさんがストアで公開されたりとかされてて熱い感じですね。
秀まるおのホームページ(サイトー企画)−秀丸エディタ(ストアアプリ版)
長い目で見ると Pure な UWP なんでしょうが、とりあえず現実問題として exe 形式のアプリを抱えてる人は UWP 化へのとっかかりとして Desktop Bridge で appx にしてしまうのもありじゃないでしょうか。
あ、因みにもとが exe なので Windows.Desktop でしか動かないです。
追記
Paint.net もいつの間にかストアで配布されてた!!すごい!