torum

主に開発中のアプリにまつわる技術系の事。

Lazarusで作成したWin32アプリをAPPXにパッケージする方法

追記:

Window11から、パッケージングは不要になるとの事

 

Lazarusで作成した、Win32API 形式のバイナリ実行ファイルを、Microsoft Store に登録するために、APPX形式にパッケージ化する手順のメモ。これまためったにやらないことで忘れそうだから。

なお、Visual Studio で作ったプロジェクト(WPFとか)限定ですが、パッケージングプロジェクトを追加してパッケージングするという超簡単な方法があります。本記事は、Lazarusなどで開発したアプリのパッケージング方法です。ぜひ本記事を読んで、その面倒くささに泣いてください。

因みに、「UWP化する」という表現が一般のニュース記事とかでも使われることが結構あるけれど、混乱の元ですね。「デスクトップコンバーター(Desktop App Converter)」という名前もまた語弊があって、APPX形式にパッケージ化するだけです。.NetのUWPに変換される訳ではなかったり。

さらに、Win32API形式とは、アプリの32Bit、64Bitとは直接には関係なく、Win32の64bit版アプリとかいう言い方も一般的には出来てしまいます。これは色々と過去からの由来があって長くなるので割愛。単に、Windows 16bitでもなく、.Netランタイムで動くのでもないWindows ネイティブ、ぐらいな感じです。Win32=プラットフォーム、32Bit・64Bit=アーキテクチャー。

さて本題の、Lazarusで作成したアプリケーションのパッケージ化。

手順

“Desktop App Converter”をストアからインストールして、すぐには起動せず、スタートメニューから、「管理者として実行」します。

そして、諸々のフォルダを作った上で、おもむろに、

DesktopAppConverter.exe -Installer C:\Apps\hoge\ -AppExecutable hoge.exe -Destination C:\Output -PackageName "Hoge" -Publisher "CN=fuga" -Version 0.0.0.1 -MakeAppx -Sign -Verbose -Verify

 といった感じで実行。

 ローカルでテストする為に、ローカルでAPPXアプリをインストール・実行するには、

Add-AppxPackage -Register C:\Output\hoge\PackageFiles\AppxManifest.xml

AppxManifest.xmlを指定するんですね。

これで、スタートメニューに登録されているはずです。

ただ、これだと、ファイルコピーにスタートメニュー登録、ぐらいしかできません。あれやこれやカスタマイズしたければ、素のXMLを編集して、コマンドラインで、makeappxです。さぁ、地獄へw

XMLスキーマの参照はこちら。

https://docs.microsoft.com/en-us/uwp/schemas/appxpackage/uapmanifestschema/element-package

makeappxについてはこちら

https://docs.microsoft.com/ja-jp/windows/uwp/packaging/create-app-package-with-makeappx-tool

 

メンドイ。x100

 

最後に、

https://docs.microsoft.com/en-us/windows/uwp/debug-test-perf/windows-app-certification-kit

で確認。エラーでなければOK。

因みにですが、ログを見ると、「64bit実行ファイル発見!」みたいな事が書いてありまして、「32bitも用意するとより多くの~」ってのがありました。両方用意するの面倒なので、64bit版Windowsでも問題なく動作する、32bit版exe一つで手抜きします。というか、両方同梱する簡単な方法があるのかな。。。

 

因みに、Lazarusで32bit・64bitクロスコンパイルの方法。

公式サイトから、
https://www.lazarus-ide.org/index.php?page=downloads

アドオンをLazarusと同じフォルダにインストール。
lazarus-1.8.0-fpc-3.0.4-cross-i386-win32-win64.exe

これで、ビルドターゲットを切り替える(Target OS to Win32 and Target CPU family to i386)だけで、クロスコンパイルが出来るようになる。元に戻すのは、(win64x86_64)

https://forum.lazarus.freepascal.org/index.php/topic,8514.15.html

 

そして、動作の確認。

 

あれ、ファイルの関連付けがされてないや、って場合は下記の通り、AppxManifest.xmlを編集。

https://docs.microsoft.com/ja-jp/windows/uwp/porting/desktop-to-uwp-extensions

アイコンが。。。という場合は、AppxManifest.xmlと同じフォルダに生成されているAssetsフォルダ内の画像を差し替えられるようです。各サイズに40個も生成されていて萎えますが。。いい加減、SVG(Path形式)にならないかな。。。