たくさんの自由帳

どうもこんばんわ。
アインシュタインより愛を込めて APOLLOCRISIS 入手した。箱が二回りぐらい大きいな?
今やってるゲーム終わらせたらやりたいです。

本題

WPFなアプリの配布用にインストーラーを作成します。

なぜ?

きたるWindows11の Microsoft Store でのexe(msi)(従来のソフトウェア)配信機能に備えて...
そういえばHomeエディションではローカルアカウント作れないってま?

ちなみに

.NET 5なら単一exeファイルを吐き出す機能がありますので、インストーラーが必要ない場合は単一バイナリをばらまくのがいいです。

単一exe作成

環境

なまえあたい
Visual Studio2019 Community Edition
Windows10 Pro
.NET5
拡張機能Microsoft Visual Studio Installer Projects

Microsoft Visual Studio Installer Projects

ってのを使います。Wixってのもあるらしいけどよく知らん

配布予定のWPFアプリを作成する

まぁ頑張って作ってくれ

配布予定のWPFアプリのソリューションを開く

ここにインストーラーをプロジェクトとして追加します。

拡張機能を入れる

こっから入れられます。

Imgur

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

Imgur

インストーラープロジェクトを追加する

ここから追加できます。

Imgur

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

Imgur

Imgur

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

Imgur

.NET 5 で出来たWPFアプリを配布対象にする

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

Imgur

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

Imgur

設定とかはそのままで完了を押せばいいです。

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

Imgur

インストーラーで.NET 5なアプリを配布するには

参考:https://docs.microsoft.com/en-us/visualstudio/deployment/installer-projects-net-core?view=vs-2019

まずはさっきのインストーラープロジェクト作成直後の画面を出します。
File Systemってタブのやつですね。こっから出せます。

Imgur

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

Imgur

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

Imgur

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

Imgur

項目の公開 の プロパティ を開きます

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

Imgur

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

Imgur

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

Imgur

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

Imgur

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

Imgur

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

Imgur

生成できない

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を選んだ影響ですね。インストーラープロジェクトのプロパティから、TargetPlatformx64にすればこの警告を消せます。

インストーラーの名前とかインストール先のフォルダ名とか

インストーラープロジェクトから変更可能です。AnotherProductNameTitleManufactorあたりを変更すればいいと思います。

Imgur

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

Imgur

スタートメニューに追加

インストーラーの利点といえばこれか?

File Systemから、User's Programs Menuを選択して、新しいショートカットを作成を押します。

Imgur

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

Imgur

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

Imgur

できたら再度ビルドします。

これでスタートに登録も出来ましたね。

Imgur

以上です。

追記:2021/10/07 アイコンを設定する場合

128 x 128じゃないとだめです。ソース:https://stackoverflow.com/questions/2041291/how-to-change-windows-applicatoins-default-icon-in-setup-project

ただ、これと別に生まれ変わったWin11Microsoft Storeでは1080 x 1080のサイズのアイコンが必要なので、svgで作っておくと幸せになれると思います。

Imgur

今回はInkScapeで作りました。128 x 128pngに書き出して、GIMPico形式に変更します。

アイコンを追加

プロジェクトのプロパティから、リソースを開いて、icoファイルをドラッグアンドドロップします。

Imgur

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

Imgur

WPFのアイコンを設定

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

Imgur

インストーラーにアイコンを追加

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

Imgur

スタートのショートカットのアイコンを設定

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

Imgur

そしたら、Browseを押して

Imgur

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

Imgur

そしたら、Current iconに追加されるので、選択してOKを押せば終了です。
あとはビルドして完成。

バージョンアップ?

バージョンの番号をあげます。インストーラーとWPFのアプリそれぞれ変更する必要があります。
インストーラーの方はバージョンを変更するとProductCodeも生成し直すか聞かれるので生成し直します。

Imgur

それから、RemovePreviousVersionsTrueにすると既存のバージョンをアンインストールしてくれるようになります。

ソースコード

https://github.com/takusan23/ItaCursor

たぶん作れます。

メモ

.slnをプロジェクトからソリューションのフォルダに移したい

-> 空のソリューションを作成して、既存のプロジェクトを追加することで解決