(※)本トピックはプログラマー向けの技術文書です

「簡易コミック作成ツール EasyComicTool」というWindows用のフリーソフト
http://www.asahi-net.or.jp/~tz2s-nsmr/EasyComicTool.html
を「Desktop App Converter」(「Desktop Bridge」)を使ってWindows10用の
ストアアプリとして変換して
https://www.microsoft.com/ja-jp/store/p/easycomictool/9nc9qfzfv0bm
この様な形で登録した時の話についてまとめておきたいと思います
(半分は自分用の備忘録の意味で書いておきます・・・が、多分参考になる人も多そうなので)


(※)本ドキュメントは随時更新していく予定です(気がむいたら)
「ここが足りない」、「ここが書いてある通りにできなかった」とかあったら
指摘してください

(※)かなり長い文章になりますが、それでも抜けている部分があるかもしれません
もし抜けがあったらご指摘頂ければ随時追加する予定です

参考にさせて頂いたURL
今回の文章を書くにあたって参考にさせて頂いたURLは下記の通りです
必要に応じてこれらを直接読んだ方が良い場合もあるかと思います
https://developer.microsoft.com/ja-jp/windows/bridges/desktop
https://docs.microsoft.com/ja-jp/windows/uwp/publish/opening-a-developer-account
https://www.ipentec.com/document/document.aspx?page=windows-convert-appx-package-using-desktop-app-converter
http://qiita.com/nanmo/items/e4611df0273d307738f4
http://qiita.com/kazaiso/items/df012c9777585f1e880a
https://blogs.msdn.microsoft.com/shozoa/2016/12/06/how-to-use-bat-file-in-dac/
http://www.buildinsider.net/mobile/winstoretips/04
https://www.ipentec.com/document/document.aspx?page=windows-create-certification-file-for-signing-uwp-application&culture=ja-jp

Windowsフリーソフトのストアアプリに変換する為の修正について

WindowsフリーソフトをDesktop App Converterで変換する際に必要となる
修正はそれほど大した作業では無いのですが、一番大きな点としては
「データファイルのフォルダ」が「プログラムフォルダ」と別になっているか?になります
そこの対応が必要なアプリの場合は、そこだけは最低限必要になりますが
それほど大した変更内容ではないかと思います

0、Desktop App Converterで変換するソフトですが、内容によっては申請が通らない
種類の物があります。管理者権限が常に必要な物や、HKEY_LOCAL_MACHINE以下の
レジストリに「書き込みを行う物」などは通らないはずです
通らない内容の一覧はここに書いてあります
https://docs.microsoft.com/ja-jp/windows/uwp/porting/desktop-to-uwp-prepare

なので、残念ながら、例えば私の「Windows10設定変更ツール」(WinUpdateSettings)
http://www.asahi-net.or.jp/~tz2s-nsmr/WinUpdateSettings.html
などは最初から申請できない訳です

1、今回ストアアプリに変換した「EasyComicTool」というソフトは
「.NET 3.5用」と「.NET4.0用」にそれぞれビルドしたC#のソフトでした

「Desktop App Converter」で変換するソフトは「.NET4.6.1用」でなければいけないので
上記とは別に「.NET 4.6.1用」にビルドし直しました
(この作業は.NETのバージョンを変更してリビルドしただけなので非常に簡単です)

2、フリーソフトで多いと思うのですが、zipファイルで解凍してそのまま使う種類の
ソフトの場合、データファイルや設定ファイルなどは「プログラムがあるフォルダと同じフォルダ」
になる事が多いかと思います

これは、既存のインストーラを使うソフトでも同じ話がありましたが、ストアアプリの場合にも
プログラムファイルは
C:\Program Files\WindowsApps\Sample_1.0.0.0_x86_xyz00ijez6t
の様な「c:\Program Files」以下のフォルダに強制的に変更され、
「そのフォルダに書き込みは許可されない」状況になりますので、
プログラム側でその対処が必要になります

私の場合は、プログラム起動時にカレントディレクトリを取得して
カレントディレクトリの文字列に「Program Files」を含んでいたら
ユーザーの「ドキュメント」フォルダ(「マイドキュメント」フォルダ)以下
System.Environment.GetFolderPath(Environment.SpecialFolder.Documents))
に変更して動く様に修正しました
(私の今回のアプリでは、ユーザーが作成するデータや、配布時のデータが巨大だった為、
アプリをアンインストールしても消えない場所である「ドキュメント」を選択しましたが、
通常は、アプリのアンインストール時に自動的に消される「ApplicationData」フォルダ以下
System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
などに変更すべきだと思います

3、「プライバシーポリシー」のページの用意と、リンクの追加
ストアアプリでは「プライバシーポリシー」のページの用意が必要になる事が多いです
今回はこの様なプライバシーポリシーページを作成した上で、ソフト側からそれを呼び出す
リンクを追加しました(ソフトから呼び出すリンクは必ずしも必要無いかもしれません)

http://www.asahi-net.or.jp/~tz2s-nsmr/uwp/privacy/privacy_policy.html


インストーラ(というかインストール用のバッチファイル)を作成する

「Desktop App Converter」で変換する為にはインストーラが必要になります
(先に書きますが、バッチファイルでのファイルコピーでも大丈夫で、これを強く推奨します)
Visual Studioなどの標準で使えるVisual Studio Installerなどで作ったインストーラでも
良いのですが、私が試した経験で言うと、「Desktop App Converter」の1.0.6.0で
インストーラからの変換が成功していたのが、1.0.8.0で突然変換できなくなり、
更に1.0.9.0で突然直ったという事があり、この間、バッチファイルの方は
「Desktop App Converter」のバージョンに関係なく安定して変換できていましたので
ここではバッチファイルからの返還を強く推奨します
(というか、Setup.msiなどのインストーラでもinstall.batなどのバッチファイルでも
「Desktop App Converter」を使う手順は完全に一緒ですのでどっちでもいいです

今回私が作ったインストール用のバッチファイルは
C:\SeiichiNishimura\EasyComicTool
という固定フォルダにコピーするバッチファイルですが、インストール先はどう書いてあっても
最終的には
C:\Program Files\WindowsApps\EasyComicTool_1.0.0.0_x86_xyz00ijez6t
の様なフォルダに強制的に書き替えられるので気にしなくていいです

今回用意したinstall.batの中身は次の通りです
(install.batと同じフォルダにあるEasyComicToolというサブフォルダ以下のファイル一式を
C:\SeiichiNishimura\EasyComicToolというフォルダを作ってそこに丸ごとコピーするだけという内容)

mkdir C:\SeiichiNishimura\EasyComicTool
xcopy .\EasyComicTool C:\SeiichiNishimura\EasyComicTool /S /E /Y
exit 0


「Desktop App Converter」を動かすために必要な環境

1、「Desktop App Converter」はWindows10のストアからダウンロードして使える
フリーソフトですが、「Desktop App Converterが動く環境」の方が重要になります
とりあえず、Windows10のストアから「Desktop App Converter」で検索して
「Desktop App Converter」のインストールはしておきましょう
(動かない環境でも、とりあえずインストールまでは問題ありません)

2、「Desktop App Converter」は、Hyper-Vと同じような技術である「Windowsコンテナー」を
使って実行する物です
お使いのPC(というかCPU)によってはHyper-Vが動かない環境もあるかもしれませんし、
(私がそうなのですが)Hyper-Vを有効にしているとVMwareやVirtualBoxなどが動かなくなるので
敢えてHyper-Vを無効にしている人も少なからずいるかと思います
本件ではHyper-Vそのものを使う訳では無いのですが、注意事項として同じような問題が
あると思っておいてください

(※)尚、詳細は書きませんが、私が使っている方法なのですが、VMwareの設定ファイルを少し
いじってからゲストOSにWindows10をインストールすると、ホストOSのHyper-Vは無効にしたままで
ゲストOSのWindows10上でHyper-VやWindowsコンテナーを動かす事が可能です
(私はそれを使って開発してますが結構便利です)

3、「Windowsコンテナー」は次の方法で有効化します

4、コントロールパネル/「プログラムと機能」を開き、左側のツリーから
「Windowsの機能の有効化または無効化」を選択します

5、「コンテナー」のチェックを付けます
(おそらくチェックを付けた後で一度PCを再起動した方が良いと思います)

6、「Windows10 SDK」のインストールが必要になりますが、
ここではVisual Studio2015 update3などがインストール済みで
「Windows10 SDKのインストールは済んでいる物」として話を進めます

(※)古いバージョンのVisual Studioなどを使っていてWindows10 SDKのインストールが
必要な場合はこちらなどを参照してWindows 10 SDKをインストールしてください
通常は必要ありません
https://docs.microsoft.com/ja-jp/windows/uwp/porting/desktop-to-uwp-run-desktop-app-converter

7、Windows10の「コンテナー」用のWindows10のベースイメージを
このページからダウンロードします
https://www.microsoft.com/en-us/download/details.aspx?id=54939

尚、いくつか種類がありますが、お使いのPCで「Windowsキー」+「R」キーから
「winver」と入力して、表示されたWindowsのバージョンが、例えば
バージョン1607(OS ビルド 14393.693)
の場合には、ダウンロードするイメージは「BaseImage-14393.wim」となります(14393で見る)

ダウンロードしたBaseImage-14393.wimファイルを例えば
C:\BaseImageフォルダを作って
C:\BaseImage\BaseImage-14393.wim
の様に配置します

8、「スタート」ボタン/”D”の列から「Desktop App Convereter」を探し、
右クリックして「その他」/「管理者として実行」で起動します

(※)「Desktop App Converter」様のPowerShellが(管理者権限で)起動します

9、「コンテナー」に最初の一度だけ「BaseImage-14393.wim」を設定する必要があります
この作業は1回だけ必要になります

10、PowerShell上で
Set-ExecutionPolicy bypass
と入力します

11、PowerShell上で
DesktopAppConverter.exe -Setup -BaseImage C:\BaseImage\BaseImage-14393.wim -Verbose
と入力します

(※)ちょっとうろ覚えですが、登録にそこそこ時間がかかるかもしれません


Microsoftに開発者登録する

1、ここの説明などを読みながら
https://docs.microsoft.com/ja-jp/windows/uwp/publish/opening-a-developer-account
ここのページからMicrosoftにアプリ開発者として登録します
https://developer.microsoft.com/ja-jp/store/register

(※)登録の際に、19ドル=2500円弱のお金がかかります
(iPhone開発者とかとは違って最初に一度払えば終わりです。毎年とかはかかりません)

(※)既にUWPアプリ(普通のストアアプリ)などを登録した事があるなど
開発者アカウントをお持ちの場合は、それがそのまま使えます

Desktop Bridge開発者(Desktop App Convererを使う開発者)として登録する

1、ここのフォームに必要事項を書いて登録しておきます(無料です)
https://developer.microsoft.com/en-us/windows/projects/campaigns/desktop-bridge

ここで登録すると、比較的すぐに届く定型メールが1通、1日程してから届く定型メールが2通目、
この後に数日かかって「日本人の担当者から日本語のサポートメールが届く」のでそこからが本番です(メールは3通届くので3通目のメールが届いたら初めて相手と連絡がついたと思ってください)

あと、この数日が待てない事を見越して、ここの登録は最初からやっといてもいいかもしれません
(確実に作る事が決まってる場合は・・・)


環境変数の登録

1、コントロールパネル/「システム」/「システムの詳細設定」を開き
ダイヤログボックスの一番下にある「環境変数」ボタンを押します

2、下にある「システム環境変数」側の「Path」をダブルクリックし、Pathの一覧の最後に
c:\Program Files (x86)\Windows Kits\10\bin\x64
を追加します
(※)このフォルダはWindows10 SDKのあるフォルダなので、先にこのフォルダが存在している事を
確認してから記入してください

3、「OK」ボタンなどで全て閉じたら、「Desktop App Converter」のPowerShellを一度閉じて
改めて、「スタート」ボタン/”D"の列の「Desktop App Converter」を右クリック/その他/管理者として実行で起動してください


署名する為の準備作業(証明書の作成)

1、マイクロソフトの開発者画面にログインし、「新しいアプリの作成」ボタンなどを押して
アプリ名などを予約しておきます

2、そうすると開発者画面のダッシュボード上に、そのアプリ名の項目が作成されます
アプリ名を選んだ画面で左側のツリー一覧に「アプリ管理」/「アプリID」があるので
それを選択すると次の様な情報が表示されます

この3行の情報は全て重要ですので控えておきましょう

パッケージ/ID/名前 123456.YourAppName
パッケージ/ID/発行元 CN=9999999-9999-9999-9999-999999999999
パッケージ/プロパティ/発行元表示名 あなたの名前

ここでは「発行元」の
CN=9999999-9999-9999-9999-999999999999
が特に重要になります

3、
C:\cert
というフォルダを作っておきます

4、
makecert.exe -r -h 0 -n "CN=CN=9999999-9999-9999-9999-999999999999" -eku 1.3.6.1.5.5.7.3.3 -pe -sv c:\cert\my.pvk c:\cert\my.cer

と入力します
(※)あなたの開発者画面で見た「CN=9999999-9999-9999-9999-999999999999」に該当する部分の
文字列を正確に入力する事が必要になります

(※)ここでは、my.pvk/my.cer/my.pfxの様に「my」というファイル名にしていますが、
nisimura.pvk/nisimura.cer/nisimura.pfxの様に違う名前でも構いません(拡張子の側は重要です)

5、上記の入力をすると、IDとパスワードを求めるダイヤログが表示されるので、
何も入力せずに「OK」ボタンを押してください

6、「Without password protection?」と聞かれるので「はい」を選択してください

7、成功すると
C:\cert
フォルダに、セキュリティ証明書ファイルの、my.pvkファイルとmy.cerファイルが作成されます

8、次に、交換用の証明書my.pfxファイルを作成します

9、
pvk2pfx.exe -pvk my.pvk -spc my.cer -pfx my.pfx

と入力します

10、成功するとC:\certフォルダに
my.pfxファイルができています


ローカル署名を自分のPC(や他のPC)で実行可能にする為に証明書のインポート

1、c:\certフォルダに作成されたmy.cerファイルを使います

2、my.cerファイルを右クリックして、ポップアップメニューから
「証明書のインストール」を選択します

3、「証明書のインポートウィザード」ダイヤログが表示されたら
「ローカルコンピュータ」を選択して「次へ」ボタンを押します

4、次の画面に切り替わったら
「証明書をすべて次のストアに配置する」を選択して「参照」ボタンを押します

5、「証明書ストアの選択」ダイヤログが開いたら
「信頼されたルート証明機関」を選択して「OK」ボタンを押します

6、元のダイヤログで「次へ」ボタンを押します

7、次の画面に切り替わったら
「完了」ボタンを押して終了です

(※)これで、証明書をインポートしたローカルPCで署名付きのアプリが
インストールできる様になります
更に次の説明で設定する「開発者向け」の設定も必要になります


ローカル署名環境の作成(自分のPCでテスト署名して実行可能にしておく)

1、デスクトップを右クリックして「個人用設定」を選択します

2、左上のホームを選択します

3、「更新とセキュリティ」/「開発者向け」を選択します

4、「開発者モード」になっている事を確認します
(なっていなければ、「開発者モード」を選択してください)


Desktop App Converterでの変換作業

1、(事前にinstall.batは用意されている物とします。setup.msiとかでもいいです)

2、尚、説明の便宜上、ここでは
C:\HomeDev3\EasyComicTool\release45フォルダにinstall.batファイルと
EasyComicToolフォルダ以下のファイル一式があるという前提にします
変換後のEasyComicTool.appxファイルは
(事前に作成済みの)C:\HomeDev3\EasyComicTool\release45\UWPフォルダの下に
C:\HomeDev3\EasyComicTool\release45\UWP\EasyComicTool\EasyComicTool.appx
の様に出力される場合の記述です

(※)install.batにおいて
C:\SeiichiNishimura\EasyComicToolフォルダを固定のインストール先としてあるので
DesktopAppConverterの-AppInstallPathでC:\SeiichiNishimura\EasyComicToolを指定しています
(いずれにしても実際のインストール先はC:\Program Files以下に強制的に書き変えられます)

(※)-AppExecutable パラメータは実行ファイルの場所を指定しています
バッチファイルの場合は必要です

(※)この情報を使っています
パッケージ/ID/名前 123456.YourAppName
パッケージ/ID/発行元 CN=9999999-9999-9999-9999-999999999999
パッケージ/プロパティ/発行元表示名 あなたの名前

(※)パッケージ名の「123456.YourAppName」の部分は、
Desktop App Converterの-PackageNameパラメータの時点では
-PackageName "YourAppName"の様に「YourAppName」としておいて
後でxmlファイルの中身を一部「123456.YourAppName」と書き換える事になります

(もしくは、最初から「123456.YourAppName」を使って大丈夫なのか?は適宜
確認してみてください)

(※)-Version 1.0.0.0の部分は、アプリの申請を再提出する度に、
1.0.1.0とか1.0.2.0の様に数字を上げてください
(exeファイル自体のバージョンも合わせるとより良いかとは思いますが、最低限ここは必要です)
4桁の数字のうち最後の桁は0のままにした方が良いとどこかに書いてあった気がしますが、
必要でしたら確認してみてください(私は最後の桁は0にして1.0.1.0の様にしました)
実際にバージョンが上がる際は1.1.0.0とか2.0.0.0とかになっていくと思います
1.1.1.0とかの3桁目はビルド番号というかストアへの再提出用のカウンタ的に使うのが良さそうです

(※)-PackageArch X86
の部分はX86(32ビット版)を指定しています。32ビット版か64ビット版の
どちらかを指定しないとエラーになるそうです
尚、今回のC#のアプリではVisual Studio2015で、プログラム自体はAny CPUで作ってあります
32ビット版と64ビット版をそれぞれ作成して別々にストア登録したい場合には
詳細を確認してみてください(とりあえず32ビット版のみの登録でも32ビットOS/
64ビットOSの双方で普通に動いてます)

3、
DesktopAppConverter.exe -Installer C:\HomeDev3\EasyComicTool\release45\install.bat -Destination C:\HomeDev3\EasyComicTool\UWP -PackageName "YourAppName" -Publisher "CN=9999999-9999-9999-9999-999999999999" -Version 1.0.0.0 -MakeAppx -PackageArch X86 -AppInstallPath C:\SeiichiNishimura\EasyComicTool -AppExecutable C:\SeiichiNishimura\EasyComicTool\EasyComicTool.exe -PackagePublisherDisplayName "あなたの名前"

と入力すると、(数分かかって)変換されます
エラーメッセージが出なければ成功です

4、EasyComicTool.appxファイルが出来ていたら、仮に署名してローカルマシンにインストールできるかテストします

5、
signtool.exe sign -f c:\cert\my.pfx -fd SHA256 -v c:\HomeDev3\EasyComicTool\UWP\EasyComicTool\EasyComicTool.appx

と入力すると、すぐに署名されます

6、(ファイルを見るエクスプローラなどで)EasyComicTool.appxファイルを右クリックして
「プログラムから開く」を選択して「アプリインストーラー」からインストールできます

7、一通り機能に問題が無いか確認してください

8、EasyComicTool.appxファイルを削除します

9、EasyComicTool.appxファイルがあったフォルダに
PackageFilesというフォルダがあり、その下にAppxManifest.xmlというファイルがあるので
メモ帳などで開きます

10.上から6行目位に

という行があるので、最初の
identity Name="YourAppName"
の部分を

パッケージ/ID/名前 123456.YourAppName
パッケージ/ID/発行元 CN=9999999-9999-9999-9999-999999999999
パッケージ/プロパティ/発行元表示名 あなたの名前
に書いてあった

identity Name="123456.YourAppName"

に書き換えて保存します

11、
MakeAppx pack /d C:\HomeDev3\EasyComicTool\UWP\EasyComicTool\PackageFiles /p C:\HomeDev3\EasyComicTool\UWP\EasyComicTool\EasyComicTool.appx /l

と入力して、EasyComicTool.appxファイルを作り直します
(ストアへの提出用に書き換えて作り直します)

(※)最後の「/l」は(小文字のエルです)
「/l」を付けないと大量のエラーが発生するので「/l」は必要です

12、
signtool.exe sign -f c:\cert\my.pfx -fd SHA256 -v c:\HomeDev3\EasyComicTool\UWP\EasyComicTool\EasyComicTool.appx

と、再度入力して署名をし直します
(identity Nameが書き換えられているので、このファイルはローカルPCでの
インストールテストはできませんが、ストアに提出できるEasyComicTool.appxはこちらになります)

13、マイクロソフトの開発者画面で、アプリのアップロード画面から
署名したEasyComicTool.appxファイル(あなたのアプリの名前.appxファイル)をアップロードします