.NET 5で出来たWPFアプリを配布するインストーラーを作成する
投稿日 : | 0 日前
文字数(だいたい) : 6171
どうもこんばんわ。
アインシュタインより愛を込めて APOLLOCRISIS 入手した。箱が二回りぐらい大きいな?
今やってるゲーム終わらせたらやりたいです。
アインシュタインより愛を込めて APOLLOCRISIS 入手した pic.twitter.com/m6r8Jop7Ae
— たくさん (@takusan__23) September 26, 2021
本題
WPFなアプリの配布用にインストーラーを作成します。
なぜ?
きたるWindows11の Microsoft Store でのexe(msi)(従来のソフトウェア)配信機能に備えて...
そういえばHomeエディションではローカルアカウント作れないってま?
ちなみに
.NET 5なら単一exeファイルを吐き出す機能がありますので、インストーラーが必要ない場合は単一バイナリをばらまくのがいいです。
環境
| なまえ | あたい |
|---|---|
| Visual Studio | 2019 Community Edition |
| Windows | 10 Pro |
| .NET | 5 |
| 拡張機能 | Microsoft Visual Studio Installer Projects |
Microsoft Visual Studio Installer Projects
ってのを使います。Wixってのもあるらしいけどよく知らん
配布予定のWPFアプリを作成する
まぁ頑張って作ってくれ
配布予定のWPFアプリのソリューションを開く
ここにインストーラーをプロジェクトとして追加します。
拡張機能を入れる
こっから入れられます。

そしたら、これを入れます。

インストーラープロジェクトを追加する
ここから追加できます。

開いたら、検索ボックスにsetupとか入れて出てくる、Setup Projectを選択します。
名前とかは各自


この画面が開けてればおk

.NET 5 で出来たWPFアプリを配布対象にする
そのためにはまず、ソリューションエクスプローラーの、配布したいWPFアプリを選んで右クリックして、発行を押します。

開いたら、フォルダーに発行するようにします。

設定とかはそのままで完了を押せばいいです。
そうしたら、一応配布するexeを一つにまとめるため、すべての設定を表示から、ターゲットランタイムをwin-x64へ、ファイルの公開オプションから、単一ファイルの作成にチェックを入れます。
これでインストール先に置くファイルの数を減らせます。(まぁインストール先なんてどうでもいいが)

インストーラーで.NET 5なアプリを配布するには
参考:https://docs.microsoft.com/en-us/visualstudio/deployment/installer-projects-net-core?view=vs-2019
まずはさっきのインストーラープロジェクト作成直後の画面を出します。
File Systemってタブのやつですね。こっから出せます。

そしたら、ソリューションエクスプローラーのレンチマークを押してプロパティも開きます。

そうしたら、File SystemのApplication Folderを右クリックして、Add -> プロジェクト出力へ進みます。

そうしたら、プロジェクトのところが配布したいWPFプロジェクトになっているか確認して、項目の公開を選択して、構成をそのままにして、OKを押します。

項目の公開 の プロパティ を開きます
ソリューションエクスプローラーから、項目の公開 (ry を右クリックしてプロパティを開きます。

そしたら、公開するWPFプロジェクトの、Properties > PublishProperties > FolderProfile.pubxmlを右クリックして、完全パスをコピーします。

そうしたら、メモ帳とかに貼り付けて、Properties/PublishProperties/...の部分をコピーします。

そうしたら、Visual Studioへ戻り、項目の公開のプロパティの、PublishProfilePathにさっきコピーした値を入れます。

以上です。ソリューションエクスプローラーからインストーラープロジェクトを右クリックして、ビルドを選択しましょう。

これで生成できる..はず?

生成できない
https://stackoverflow.com/questions/339106/unrecoverable-build-error-on-any-msi-setup-project
管理者権限でコマンドプロンプトを開いて、以下のコマンドを叩いてPC再起動で治るとか?
regsvr32 "C:\Program Files (x86)\Common Files\Microsoft Shared\MSI Tools\mergemod.dll"
regsvr32 ole32.dll
targeting 'x64' is not compatible with the project's target platform 'x86'
win-x64を選んだ影響ですね。インストーラープロジェクトのプロパティから、TargetPlatformをx64にすればこの警告を消せます。
インストーラーの名前とかインストール先のフォルダ名とか
インストーラープロジェクトから変更可能です。Another、ProductName、Title、Manufactorあたりを変更すればいいと思います。

しっかりアンインストールも出来ます。

スタートメニューに追加
インストーラーの利点といえばこれか?
File Systemから、User's Programs Menuを選択して、新しいショートカットを作成を押します。

そしたら、Application Folderを選択して、項目の公開 (以下略を押してOKを押します。

そしたら、プロパティを選んで、(Name)をアプリ名に変更します。

できたら再度ビルドします。
これでスタートに登録も出来ましたね。

以上です。
追記:2021/10/07 アイコンを設定する場合
128 x 128じゃないとだめです。ソース:https://stackoverflow.com/questions/2041291/how-to-change-windows-applicatoins-default-icon-in-setup-project
ただ、これと別に生まれ変わったWin11のMicrosoft Storeでは1080 x 1080のサイズのアイコンが必要なので、svgで作っておくと幸せになれると思います。

今回はInkScapeで作りました。128 x 128でpngに書き出して、GIMPでico形式に変更します。
アイコンを追加
プロジェクトのプロパティから、リソースを開いて、icoファイルをドラッグアンドドロップします。

できたら、Resourcesフォルダに追加されるので、Resourcesフォルダ内にあるicoのプロパティを開いて、ビルドアクションをリソースにします。必要かどうかはわかりませんが。

WPFのアイコンを設定
プロジェクトのプロパティを開いて、アプリケーションを押して、リソースの中のアイコンを変更します。

インストーラーにアイコンを追加
インストーラープロジェクトを開いて、ここから追加できます。

スタートのショートカットのアイコンを設定
User's Programs Menuにあるショートカットのプロパティを開いて、Iconを選んでBrowseを押します。

そしたら、Browseを押して

さっき追加したアイコンを選びます。

そしたら、Current iconに追加されるので、選択してOKを押せば終了です。
あとはビルドして完成。
バージョンアップ?
バージョンの番号をあげます。インストーラーとWPFのアプリそれぞれ変更する必要があります。
インストーラーの方はバージョンを変更するとProductCodeも生成し直すか聞かれるので生成し直します。

それから、RemovePreviousVersionsをTrueにすると既存のバージョンをアンインストールしてくれるようになります。
ソースコード
https://github.com/takusan23/ItaCursor
たぶん作れます。
メモ
.slnをプロジェクトからソリューションのフォルダに移したい
-> 空のソリューションを作成して、既存のプロジェクトを追加することで解決
- 本題
- なぜ?
- ちなみに
- 環境
- Microsoft Visual Studio Installer Projects
- 配布予定のWPFアプリを作成する
- 配布予定のWPFアプリのソリューションを開く
- 拡張機能を入れる
- インストーラープロジェクトを追加する
- .NET 5 で出来たWPFアプリを配布対象にする
- インストーラーで.NET 5なアプリを配布するには
- 項目の公開 の プロパティ を開きます
- 生成できない
- targeting 'x64' is not compatible with the project's target platform 'x86'
- インストーラーの名前とかインストール先のフォルダ名とか
- スタートメニューに追加
- 追記:2021/10/07 アイコンを設定する場合
- アイコンを追加
- WPFのアイコンを設定
- インストーラーにアイコンを追加
- スタートのショートカットのアイコンを設定
- バージョンアップ?
- ソースコード
- メモ