Visual Studio Installer Projects 2022 で作成したセットアップをインストールすると、デスクトップやスタートメニューのショートカットがアプリ独自のアイコンではなく、味気ない既定のアイコンになってしまうことがあります。さらに別PCで setup.exe を実行すると「Setup.msi が見つかりません」と表示されるケースもあります。この記事では、この2つのトラブルの原因と安全な解決手順を、実務で困らないレベルまで詳しく解説します。
Visual Studio Installer Projects 2022でショートカットアイコンが既定アイコンになる理由
Visual Studio Installer Projects 2022(以下「セットアッププロジェクト」)で MSI/EXE を作成すると、インストール後に作成されるショートカットのアイコンが「白い四角にCD」のような既定の MS アイコンになってしまうことがあります。以前のバージョンでは同じ設定で問題なく表示されていたのに、VS 2022 に移行した途端に発生した、という報告も多い現象です。
この現象のポイントは、次の2つです。
- ショートカットの ターゲット が「プライマリ出力(Primary output)」ではない、または誤った出力を指している
- ショートカットの Icon プロパティ が、実行ファイルではなく「別途追加した .ico ファイル」を指している
VS 2022 のセットアッププロジェクトでは、ショートカットのターゲットとして「発行済みアイテム(Published items)」を使う想定が強くなっており、実行ファイルに埋め込まれたアイコンをそのまま使うのがもっともトラブルが少ないやり方です。
ありがちな設定ミス
実際にアイコンが既定アイコンになってしまうパターンを整理すると、次のようなものが多いです。
- Application Folder に .ico を「ファイルとして」追加し、ショートカットの Icon でその .ico を選んでいる
- ショートカットの Target が「Primary output from <プロジェクト名>」ではなく、別のフォルダーやファイルを指している
- VS 2019 以前で作った .vdproj を VS 2022 にアップグレードした際に、内部的な参照先が変わってしまった
- アプリ本体にアイコンが埋め込まれておらず、実行ファイル側がそもそも既定アイコンのままになっている
これらをまとめて解決する一番シンプルな方針が、この記事のテーマである
「ショートカットのアイコンは、実行ファイル(プライマリ出力)に埋め込んでおき、ショートカットはそのアイコンを取得する」
というやり方です。
最優先の解決策:実行ファイルにアイコンを埋め込み、ショートカットはプライマリ出力からアイコンを取得する
ここからは、実際の設定手順を「アプリ側」「セットアッププロジェクト側」に分けて詳しく解説します。
手順1:アプリケーション側にアイコンを埋め込む
まず、アプリケーション本体(exe)にアイコンを埋め込んでおきます。Visual Studio では、プロジェクトのプロパティからアプリケーションアイコンを指定できます。
C# WinForms / WPF の場合
- ソリューション エクスプローラーでアプリのプロジェクトを右クリックし、[プロパティ] を開く
- [アプリケーション] タブを選択
- (または )にあるドロップダウンから .ico ファイル を選択
- .ico ファイルをまだプロジェクトに追加していない場合は、[参照] ボタンから .ico を追加する
- プロジェクトを ビルド して、実行ファイルにアイコンが埋め込まれていることを確認
ビルド後、エクスプローラーで exe を右クリック → [プロパティ] → の表示が期待通りになっていれば OK です。
C++(MFC/Win32)の場合
- リソースエディタで .ico を
IDI_ICON1などとして追加 - .rc ファイルにアイコンが登録されていることを確認
- ビルドして exe のアイコンが変わるかチェック
どの言語でも共通なのは、「アプリ側の exe にアイコンが埋め込まれていること」です。セットアッププロジェクト側でごちゃごちゃ設定する前に、ここを必ず確認しておきましょう。
手順2:セットアッププロジェクトにプライマリ出力を追加する
次に、セットアッププロジェクト(.vdproj)内で、アプリケーションのプライマリ出力を追加します。これは通常、セットアッププロジェクトを作成したウィザードの途中で一度は行っているはずですが、構成を見直す意味でも確認しておきます。
- セットアッププロジェクトをダブルクリックして開く
- 画面左上のドロップダウンから [ファイル システム(ターゲット コンピューター)] を選択
- 左側のツリービューの [アプリケーション フォルダー] を右クリック → [プロジェクト出力の追加]
- 表示されたダイアログで、対象のプロジェクトを選び、[プライマリ出力] にチェックを入れて追加
ここで追加した「プライマリ出力」が、インストールされる exe(=アイコンを埋め込んだ実行ファイル)に相当します。
手順3:Application Folder で新しいショートカットを作成する
ショートカットは、必ず Application Folder から作成し、そのあとデスクトップやスタートメニューへコピーするのが安全です。
- [ファイル システム] ビューで [アプリケーション フォルダー] を選択
- 右ペインの空白部分を右クリック → [新しいショートカットの作成]
- 表示されたダイアログで [プライマリ出力(Primary output from <プロジェクト名>)] を選択 → [OK]
- 作成されたショートカットの Name プロパティを、ユーザーに見せたい名称(例:
MyApp)に変更
この時点では、ショートカットのアイコンはまだ既定アイコンのままで構いません。後の手順で修正します。
手順4:ショートカットをデスクトップ/スタートメニューに配置する
作成したショートカットを、ユーザーごとに見える場所へコピーします。
- Application Folder のショートカットを選択
- Ctrl + C でコピー
- 左側のツリーから [ユーザーのデスクトップ] を選択し、右ペインで Ctrl + V(貼り付け)
- 同様に [ユーザーのプログラム メニュー] にも貼り付ける
ショートカットを 直接「ユーザーのデスクトップ」で作るのではなく、Application Folder で一度作ったものをコピーするのがポイントです。こうしておくと、ターゲットやアイコンの設定を 1 箇所で管理でき、設定漏れや不整合を防げます。
手順5:ショートカットの Icon を「プライマリ出力」から取得する
ここがもっとも重要なポイントです。アイコンは .ico ファイルからではなく、プライマリ出力(exe)から取得します。
- Application Folder にあるショートカットを選択
- プロパティ ウィンドウの Icon を選び、右側の […] ボタンをクリック
- アイコンを参照するダイアログが開くので、ツリービューから
- [ファイル システム オブジェクト] → [アプリケーション フォルダー] を展開
- その中の [プライマリ出力(Primary output from <プロジェクト名>)] を選択
- [OK] を押してダイアログを閉じる
この設定により、ショートカットは「プライマリ出力の exe に埋め込まれたアイコン」を使用するようになります。同じ操作を、デスクトップ/スタートメニュー側のショートカットにも反映しておきます(必要なら、それぞれの Icon プロパティで同じ設定を行う)。
手順6:セットアッププロジェクトを「再ビルド」してからテストする
設定変更後は、必ずセットアッププロジェクトを [再ビルド] してください。通常の [ビルド] だと、.vdproj が一部しか更新されず、古い MSI が残ってしまうことがあります。
- ソリューション エクスプローラーでセットアッププロジェクトを右クリック
- [再ビルド] を選択
- 生成された
.msiとsetup.exeを、古いものと混ざらない別フォルダーにコピーしてテスト
テストでは、既存のバージョンがインストールされている場合は一度アンインストールするか、プロダクトコードを更新する(バージョン番号を上げる)などして、旧版のキャッシュが影響しない状態を作るとより確実です。
setup.exe 実行時に「Setup.msi が見つかりません」と表示される場合の対処
次によくあるのが、別PCに配布した setup.exe を実行したときに
「Setup.msi が見つかりません」
と表示されてインストールが開始できないトラブルです。
setup.exe と MSI の関係
Visual Studio のセットアッププロジェクトは、ビルド時に通常
セットアップ名.msi(インストーラー本体)setup.exe(ブートストラッパー/前提条件ランチャー)- 必要に応じて、前提条件用のフォルダー(例:
vcredist_x64など)
を同じ出力フォルダーに生成します。setup.exe は、内部的に「どの MSI を実行するか」を埋め込んでおり、その MSI が同じフォルダーに存在しないと「Setup.msi が見つかりません」といったエラーを出すようになっています。
エラーが出る主な原因
- MSI ファイルを一緒に配布していない(
setup.exeだけを渡している) - ビルド後に MSI のファイル名を手動で変更している
- MSI だけを別フォルダーへ移動してしまい、
setup.exeと離れている - 逆に、古い
setup.exeと新しい MSI を混在させてしまっている
正しい配布方法
もっとも確実なのは、ビルド出力フォルダーを「一式まとめて」配布することです。
- Release ビルドで生成されたセットアッププロジェクトの出力フォルダーを開く
- そのフォルダー内の
setup.exeMySetup.msi(プロジェクト名に応じた MSI)- 前提条件フォルダー(存在する場合)
- ユーザーには、その ZIP を解凍してから
setup.exeを実行してもらう
MSI のファイル名を「setup.msi」のように安易に変更すると、setup.exe の内部参照とズレてしまい、今回のエラーの原因になります。名前を変えたい場合は、セットアッププロジェクトのプロパティ(Output file name 等)から変更し、ビルドし直すのが安全です。
テスト時は MSI だけでインストールしてもよい
テスト環境の PC に、.NET や VC++ ランタイムなどの前提条件がすでにインストールされている場合、
- .msi を右クリック → [インストール]
で直接インストールして動作確認しても構いません。ただし、前提条件が未インストールの PC では、MSI 単体だとエラーになることがあるため、本番配布では必ず setup.exe とセットで配るようにしましょう。
それでもショートカットアイコンが既定のまま変わらないときのチェックリスト
ここまで設定してもアイコンが変わらない場合は、次の観点で確認してみてください。
1. Windows のアイコンキャッシュが壊れていないか
Windows では、パフォーマンスのためにアイコン画像をキャッシュしています。このキャッシュが壊れてしまうと、ショートカットの実体が正しくてもアイコンだけ更新されない、という現象が起こります。
まずは以下を試してください。
- 一度 サインアウト して再ログイン
- または PC を再起動
- 別ユーザーアカウントでログインして表示を確認
それでも改善しない場合は、「Windows アイコンキャッシュ 再構築」などで検索し、OS バージョンに合った手順でキャッシュを削除・再生成してください。システムフォルダーを扱う操作になるため、必ずバックアップと管理者権限を意識して慎重に行う必要があります。
2. 本当に新しいビルドでインストールしているか
よくあるのが、「設定を変えてビルドしたつもりが、実際には古い MSI をインストールしていた」というケースです。
- セットアッププロジェクトを [再ビルド] したか
- 出力フォルダーに 複数の MSI/EXE が混在していないか
- テスト用フォルダーに古いバージョンの MSI が残っていないか
- インストーラーのプロパティ([詳細] → バージョン)で、ビルド日時やバージョンが変わっているか
不安なときは、一度アンインストール → 再起動 → 新しい MSI/EXE だけを別フォルダーにコピーして検証すると、切り分けがしやすくなります。
3. .ico ファイルの内容が不正になっていないか(.ico を直接使う場合)
どうしても .ico ファイルを直接指定したい場合、.ico の中身が原因でアイコンが表示されないことがあります。特殊なビット深度や破損したイメージを含む .ico が原因で、Visual Studio やインストーラーが正しく扱えない例が報告されています。
推奨される構成は次のようなものです。
| サイズ | 推奨ビット深度 | 用途・備考 |
|---|---|---|
| 16×16 | 32bit(アルファ付き) | エクスプローラーの詳細表示、古いダイアログなど |
| 32×32 | 32bit(アルファ付き) | 標準的なショートカットアイコンの表示 |
| 48×48 | 32bit(アルファ付き) | 大きいアイコン表示、古めの環境との相性を意識 |
| 256×256 | PNG 圧縮可 | 高解像度ディスプレイ向け、Windows 10/11 の拡大表示 |
一部環境では、64×64 のイメージを含めると表示が安定したという報告もあります。逆に、あまりに多くのサイズ・ビット深度を詰め込みすぎると不具合の原因になることもあるため、上記程度に絞るのがおすすめです。
また、デザイン面では以下も確認しておきましょう。
- 小さいサイズ(16×16 等)でもロゴが潰れず判別できるか
- 縁まわりがきちんと透過されているか
- 背景色とアイコン色が近すぎて見づらくなっていないか
4. ショートカットのターゲットが正しいか
ショートカットの Target プロパティが、「Primary output from <プロジェクト名>」になっているか必ず確認してください。
- Application Folder 以外の場所で作ったショートカットを使っていないか
- ターゲットが別の出力(例:コンフィグファイルやヘルプファイル)になっていないか
- 複数のショートカットをコピーする際に、誤ったショートカットを複製していないか
一度ショートカットを削除して、Application Folder から「プライマリ出力」をターゲットにした新しいショートカットを作り直すのが、最終的には一番早い対処になることが多いです。
5. ランタイムの前提条件設定が実態と合っているか
直接アイコンとは関係ありませんが、セットアッププロジェクトの [前提条件(Prerequisites)] 設定が実際のアプリと合っていないと、インストールが途中で失敗し、「アイコンができない」「ショートカットが作られない」といった副次的な問題に見えることがあります。
- .NET 6/7 や .NET 8 の 自己完結型(Self-contained) アプリなのに、.NET Framework 4.8 を前提条件にしている
- 実際には .NET Framework 4.8 が必要なのに、前提条件に含めていない
- VC++ 再頒布可能パッケージのバージョンが環境と不整合になっている
インストールログを見ると、ショートカット作成直前の段階でエラーが起きており、その結果ショートカットも作られていない、というパターンも珍しくありません。前提条件は、実際のアプリのターゲットフレームワーク/ランタイム構成に合わせて、落ち着いて再確認しておきましょう。
.ico ファイルを使う場合のベストプラクティス
基本方針は「プライマリ出力の exe にアイコンを埋め込む」ですが、以下のようなケースでは、.ico をセットアッププロジェクト内でも明示的に扱うことがあります。
- コントロールパネルの「アプリと機能」一覧に表示されるアイコン(AddRemoveProgramsIcon)を別アイコンにしたい
- ヘルプファイルやツール群など、複数のショートカット用に別々のアイコンを用意したい
その場合も、次のようなルールを守るとトラブルを減らせます。
- .ico は プロジェクトのソース管理(Git 等)に含める
- サイズやビット深度は前述の推奨構成に合わせる
- ファイル名は英数字のみ(例:
MyApp.ico)にして、スペースや日本語は避ける - できるだけ アプリ側の exe にも同じアイコンを埋め込む(一貫性をもたせる)
また、アイコンファイルそのものが壊れていると、セットアッププロジェクトのビルド中に「Unable to build shortcut…」のようなエラーが発生することもあります。その場合は、一度別のアイコンエディタで開き直し、余分なサイズ・形式を整理してから保存し直すと改善することがあります。
よくある原因と対処の早見表
ここまでの内容を、実務で使いやすいように早見表としてまとめます。
| 症状 | 主な原因 | 対処 |
|---|---|---|
| ショートカットが既定アイコンになる | アイコンを .ico ファイルから直接指定している/ターゲットがプライマリ出力でない | exe(プライマリ出力)にアイコンを埋め込み、ショートカットの Icon を「アプリケーション フォルダー → プライマリ出力」から取得する |
別PCで setup.exe が「Setup.msi が見つかりません」と表示 | MSI を同梱していない/MSI のファイル名を手動で変更した/古い setup.exe と混在 | setup.exe と MSI、前提条件フォルダーを同じフォルダーにまとめて配布し、MSI の名称を勝手に変えない |
| 何をしてもアイコンが変わらない | Windows のアイコンキャッシュ破損 | サインアウト/再起動で改善しなければ、OS バージョンに応じた手順でアイコンキャッシュを再構築する |
| 一部の PC だけ既定アイコンになる | .ico のサイズ・ビット深度の組み合わせが環境と相性が悪い | 16×16, 32×32, 48×48, 256×256 の 32bit アイコンを含む .ico を作り直して指定する |
| インストール中にエラーが出て、ショートカットが作成されない | 前提条件設定が実際のランタイムと不整合 | セットアッププロジェクトの [前提条件] とアプリのターゲットフレームワーク/ランタイム構成を一致させる |
| アップデート後にタスクバーやスタートメニューのピン留めアイコンが壊れる | MSI が製品コード GUID ベースのショートカットを作り、更新時に GUID が変わるため | これは MSI と Windows Installer の仕様制約が大きく、完全回避は難しい。ピン留め用の独自ショートカットを GPO 等で配布するなどの運用で回避する事例もある。 |
| ビルドは通るが一部ショートカットのアイコンだけおかしい | 一部ショートカットが Application Folder ではなく別の場所から作られている | Application Folder で作ったショートカットを基準にし、そこからデスクトップ/メニューへコピーして再構成する |
運用面で押さえておきたいポイント
最後に、Visual Studio Installer Projects 2022 を使ううえで、トラブルを減らすための運用上のコツをいくつか挙げておきます。
テストは必ず「クリーンな環境」で行う
開発マシンだけでなく、可能であれば次のような環境でもテストしましょう。
- 新規にセットアップした仮想マシン(Hyper-V、VMware、VirtualBox など)
- 異なるバージョンの Windows(Windows 10 と Windows 11 の両方など)
- 管理者権限のない標準ユーザーでのインストールシナリオ
アイコンやショートカットのトラブルは、ユーザー権限やグループポリシーの影響を受けることも多いため、実際の利用環境に近い条件での検証が重要です。
セットアッププロジェクトの .vdproj はソース管理に含める
.vdproj はテキストファイルなので、Git 等で管理しておくと、
- いつどの設定を変えたか
- アイコン設定を変更したコミット
- 前提条件を追加/削除した履歴
が追いやすくなります。特にアイコンまわりは、プロパティウィンドウで何気なく触った変更が後で効いてくることがあるため、履歴を辿れる状態にしておくと安心です。
アイコンとアプリ名は「ブランド」として一貫性を保つ
ユーザー視点で見ると、
- デスクトップのショートカット
- スタートメニュー
- タスクバーのピン留め
- 「アプリと機能」に表示される一覧
のどこを見ても同じアイコン・同じアプリ名であることが重要です。そのためにも、
- アプリ本体の exe に埋め込むアイコンと、セットアッププロジェクト内で使うアイコンを揃える
- ショートカット名、プロダクト名、ファイル名に大きなズレを作らない
といった基本を押さえておくと、サポート問い合わせの件数もぐっと減らせます。
まとめ:最短で直すなら「プライマリ出力のアイコン」を使う
Visual Studio Installer Projects 2022 でショートカットアイコンが既定アイコンになってしまう問題は、一見するとバグのように見えますが、実際には設定の持ち方とアイコンの扱い方が原因であることがほとんどです。
ポイントを改めて整理すると、次のようになります。
- アプリ本体の exe に、プロジェクトのプロパティから .ico を埋め込んでおく
- セットアッププロジェクトでは
- Application Folder に プライマリ出力 を追加
- Application Folder でショートカットを作成 → デスクトップ/スタートメニューへコピー
- ショートカットの Icon は 「アプリケーション フォルダー → プライマリ出力」 を指定
- ビルド後は 再ビルド してから、最新の MSI/EXE だけを別フォルダーにコピーしてテストする
- 配布時は setup.exe と MSI、前提条件フォルダーを同じフォルダーにまとめて配布 し、MSI の名前を手動で変えない
- それでもダメな場合は
- アイコンキャッシュの再生成
- .ico のサイズ・ビット深度の見直し
- 前提条件設定の整合性チェック
この手順を踏めば、多くの「ショートカットアイコンが表示されない」「setup.exe が Setup.msi を見つけられない」といったトラブルは、再現性をもって解消できるはずです。Visual Studio Installer Projects 2022 で安定したセットアップを運用するためのベースとして、ぜひ自分のプロジェクトにも取り入れてみてください。

コメント