スポンサーリンク

VisualStudio2022 Installer Projectとは?

小規模個人向けで使いやすく古臭い

以下からダウンロードできます。
VS2022から直接拡張機能として追加もできるみたいです。
https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2022InstallerProjects

使いやすさは抜群と思います。
一時期、WiXやMSIXの習得も試みましたが、学習コストが高く感じて個人で小規模だとこれで十分と思いました。

以下の設定をする前に

やったのに反映されないということが非常に多かったので、以下の実施をたらふくやったら最終的にうまくいきました。

  • プロジェクトのリビルド
  • インストーラープロジェクトのリビルド
  • VSの再起動

標準設定での落とし穴

使い方は割愛します、先日にハマった罠を綴ります。

私は、バージョンアップとして上書きインストールをしたいと考えいました。
インストーラープロジェクトのプロパティ設定でバージョンを更新するとVSが「ProductCodeを変更しますか?」と促してくるので必ず変更(VSが適当に変更してくれる)していました。
ProductCodeについては下記を参照してみてください。
https://h-toss.com/visualstudio2022-installer-project%e3%81%a8%e3%81%af%ef%bc%9f/

これだけでよいと思っていたのですが、これだと上書きはなく追加インストールとなりアンインストール時にたんまり出てくる全バージョンの自分のアプリに衝撃を受けました。
アプリ自体は更新されるのでアンインストール時に気づきます。

気持ち悪いので上書きインストールにするためには
RemovePreviousVersions = True (初期値はFalse)
に設定する必要があります。
DetectNewerInstalledVersion = True
も必須ですがこちらは初期値がTrueです。
「UpgradeCode」は変更してはいけませんが、「ProductCode」と違いバージョンを変更しても更新を促されません。

以上で上書きインストール設定は完了です。
それでもうまくできない場合は「実行ファイルのアイコン設定をする」というのもあるようですがそれは後述します。

アプリのアイコン設定

個人向けで小規模なのでそんなの1か所で設定するんでしょ?
と思いがちですが数か所で設定する必要があります。

まず、icoファイルを用意します。
ちなみに私はWEB開発もしているので「favicon.ico」を使いましたがVSは厳格のようで適当につくったicoファイルでは不合格でした。
私は以下で再生成して合格できました。
https://www.icoconverter.com/

  • まず実行ファイルのアイコン
    • メインプロジェクトのプロパティでアイコンを設定します。
      ローカルから直接参照可能。
  • インストーラープロジェクト
    • View → File System
      • まずローカルからの直接参照ができないので、「ファイルシステム」にローカルから保存します。
        私は「Application Folder」配下に保存しましたので、インストール先のフォルダ内にも展開されました・・・。
        ルートの方が良かったのかも。
      • ユーザーのデスクトップにショートカットを作った場合
        • アイコンの設定が必要なのでファイルシステムに保存したアイコンを参照しましょう。
      • ユーザーのプログラムメニューにショートカットを作った場合
        • アイコンの設定が必要なのでファイルシステムに保存したアイコンを参照しましょう。
    • インストーラープロジェクトのプロパティ
      • AddRemoveProgramsIcon
        アンインストール画面で表示されるアイコンです。
        こちらにもアイコンを設定しましょう。

なんと同じアイコンを4つほど設定することになりました。
ある意味すべて独自にできる小回りの効きの良さを感じますが、個人向け小規模アプリでは手間がかかるだけでした。
この手間が無駄にかかるところが古臭いといわれるようです。

インストールしたアプリが検索窓に出てこない

「ユーザーのプログラムメニューにショートカット」を作ってください。
私の経験上、ショートカットはすべて作るようにしました。

ProgramFilesにインストールさせない

私もそうですが、個人の開発者はまずアプリのデジタル証明書を持っていないと思います。
OSからは「信頼されないアプリ」として認識されます。
ProgramFilesフォルダでは証明書がないと以下の制約があります。

管理者権限がないと書き込みできない 場所になっています。

つまり:

  • 設定ファイル(ini, xml, json)
  • ログファイル
  • DB ファイル(SQLite など)
  • キャッシュ

これらを アプリ実行中に書き込むと失敗する 可能性が高いくなります。

じゃあどこにするのか?

私のような個人の開発者でWindows11だと・・・。
C:\Users\<ユーザー名>\AppData\Local\Programs\MyApp\
(%LOCALAPPDATA%\Programs\<アプリ名>\)
ですね。
ここだと煩わしいUACも出ません。

Setup プロジェクトで LocalAppDataFolder を使う手順

1. Setup プロジェクトを開く

VS2022 → Setup プロジェクトを右クリック → View → File System

2. 「Application Folder」を選択

左側のツリーにある:

  • Application Folder
  • User’s Desktop
  • User’s Programs Menu

のうち Application Folder を選択。

3. Application Folder のプロパティを開く

右側のプロパティウィンドウで DefaultLocation を編集します。

4. DefaultLocation を LocalAppDataFolder に変更

以下のように設定します:

[LocalAppDataFolder]\Programs\[ProductName]

これでインストール先はこうなる
C:\Users\<ユーザー名>\AppData\Local\Programs\<ProductName>\

.netCoreとFrameworkでの違い

.netFramework3~4だと「プライマリ出力」を選択するのだが、.netCoreだと「項目の公開」がしれっと追加されている。
最上段に追加されていたことからプルダウンの初期値「以下から選択」と勘違いしてしまいました。

「プライマリ出力」にしてしまうとDLLとなってしまうので注意。

直接EXEファイルの追加をしないこと。
標準ではDebugとReleaseで階層が違うのでReleaseコンパイルで内包されるのはDebugのEXEとかになりうる。