C#やVBなどで配布用のインストーラを作成する手順についてまとめていきます。基本的なやり方としては、インストール用プロジェクトを追加してビルドすることで作成できます。
アイコンを追加したり、ファイルを追加したりすると、思ったより作るのは手間ですが一度やれば慣れると思います。
インストーラを作るには?準備編
インストーラ機能の追加
拡張機能から「拡張機能の管理」を選びます。
「オンライン」から「Installer Projects」を選んでインストールします。
ビジュアルスタジオを一度終了させるとインストールが実行されます。
これでインストーラ作成が利用できるようになります。
この作業は1度やればいいようです。
プロジェクトを作るたびに再度やる必要はありませんでした。
アイコンの作成
配布プログラムではアイコンも自分で用意したいもの。
そのためには、ソリューションエクスプローラーから「追加>新しい項目」で「アイコンファイル」を実行します。
するとエディタが開くのでアイコンを編集します。
上に描画用のツールがあります。バケツツールを使って色を流し込むこともできます。
アイコンを自作するのが大変な人は、画像をコピペしてみると早いかもしれません。
色制限があるので再現性は100%とはいきませんが、一から書くよりは早いと思います。
【Visual Studio2019】アイコン・エディタの使い方 - アプリの教科書
またそれ以外のアイコン専用ソフトで作ったアイコンも利用できます。
Greenfish icon editorはレイヤーなども使えてはかどる無料アプリです。
【Visual Studio】アプリ用アイコンを作りに便利な無料ソフトは? - アプリの教科書
プロジェクトのバージョンとコンポーネント
バグ対処や機能追加のたびにバージョン数値を変更しておきましょう。
設定するにはプログラムのPropertiesを開きます。
「公開」のところに「バージョン」があるので設定します。
同ページには「必須コンポーネント」があるので.netframeworkのランタイムをセットアップに含めるにはチェックしておきましょう。
インストーラを作るには?実行編
セットアップの追加
「ソリューション」を選択状態にします。
右クリックしてメニューから「追加>新しいプロジェクト」を実行します。
「Setup Project」を選びます。「setup」などのワードで検索すると見つけやすいです。
で、インストーラー用のプロジェクトを追加。
セットアップのプロパティ
セットアップ用のプロジェクトを選択してプロパティを変更します。
設定しておいたほうがいい箇所は以下になります。
- ProductName:変更しないとSetup1のような名前で登録されてしまいます。
- Manufactuller:発行元
- Version:バグの問い合わせ等で便利ですのでバージョン管理番号は設定しておきましょう。
ファイルを追加する
セットアップ用プロジェクトを選び、右クリックメニューから「View>ファイルシステム」を選ぶとファイルを追加する画面となります。
ここでは、
- アプリを登録する「Application Folder」
- ユーザのデスクトップ用の「Users desktop」
- ユーザのプログラムメニュー用の「users programs menu」
...といった項目があります。それぞれに必要なファイルを追加します。
アプリケーション
アプリを追加するには、「application folder」を選び、「Add」で「プロジェクト出力」を実行。
「プライマリ出力」を選んで追加します。
他、インストールしたいファイルやフォルダがあればApplication Folderに追加します。
フォルダは空だと作られないようですが、SetupのプロパティでAlwaysCreateをTrueにしておくと作ってくれるようです。
デスクトップ
アプリへのショートカットを作成します。
「UsersDesktop」を選択した状態で右側のペインで「新しいショートカットの作成」を実行。
あとはショートカット先のファイルを指定します。
ショートカット名を打ち直せばOK。
ただしこのまま作ると、ショートカットがEXEのあるディレクトリを開くだけでした。ショートカットでEXEを起動させるには以下のように作るとよさそうです。
まず「Application Folder」へ移動し、すでに追加している「プライマリ出力」のアイコンを右クリック。「Create shortcut to プライマリ出力...」を実行します。
こうして作ったショートカットを、名前を打ち直してデスクトップのフォルダーへドラッグアンドドロップで移動します。
こでデスクトップにはEXEを起動するショートカットが作られます。
デスクトップのショートカットのアイコン
作成したショートカットのプロパティをみると「Icon」の欄があります。アイコンの設定はこちらから行います。
ICOファイルを直接指定する方法がわからなかったのですが、「ApplicationFolder」にアイコン用ICOファイルを先に追加しておきます。
あとはプロパティのIconから、ICOファイルを選べます。。
これで、インストール後にちゃんとアイコンが反映されていました。
プログラムメニュー
プログラムメニューは、スタート画面にあるメニューへショートカットを追加する設定です。
ファイルやショートカットの追加やアイコンの設定方法は、上記のデスクトップメニューの追加方法と一緒です。
セットアップEXEの作成(ビルド)
あとは普通にEXEを作る時のように「ビルド」を実行します。
ビルドしたEXEは、プロジェクト傘下のフォルダにできているはずです。
MSIを実行してみると、ウィザードが始まります。
インストールのテスト
完成するまでには、インストールの確認と、アンインストールを何度か繰り返すことになると思います。
これをいちいち「ビルド→EXE起動→確認→コンパネからアンインストール」では面倒です。
インストーラ用プロジェクトを右クリックすると「インストール」「アンインストール」があります。ここからインストールの実行とアンインストールを行って動作確認しましょう。
インストーラのQA・不具合
セットアップが見つからない?
以下に対応手順をまとめました。
【Visual Studio】セットアップがみつからない? - アプリの教科書
インストール・アンインストールのメニューが出ない?
一度ビルドして作らないと出ないようです。
またビルドしてもメニューが非アクティブのままということがあって悩みました。
一度プロパティで構成を「アクティブ」から「Debug」へ指定しなおしリビルドしたらアクティブにになりました。このせいで治ったのか、バグなのかはまだよくわかりません。
ビルドできない?
ログでエラー「ERROR」が出たら、その内容をもとに対処していきます。
うちではなぜか「ERROR: The target of shortcut 'コマ送りで困ったー' is invalid. The 'AlwaysCreate' property of folder 'User's Programs Menu' must be set to 'True'」というエラーがでました。
プログラムメニューで「いつも作られる(AlwaysCreate)」の設定が「True」ではないというものです。
そこで設定を「True」にして再度ビルドしたら今度は大丈夫でした。
プロジェクトの依存関係を更新できません?
旧バージョンで起きるケースがあるようで、その場合はVisuaStudioのアップデート等で対処できると思います。
「ビルドデータを手動で削除する」「ソリューションを一度削除して再追加してみる」などしてみましょう。
ランタイムを含めるには?
ドットネットフレームワークのランタイムを利用するような場合、インストーラにランタイムを含められるのでしょうか。
インストーラのプロパティを開き、さらに「Prerequeisites...」というボタンを押してみると...
「必須コンポーネントをインストールするセットアッププログラムを作成する」というチェックがあります。
ここで「インストールする必須コンポーネントを選択」すればよさそうです。
インストーラがインストールしている途中で「ランタイムがない場合には入手」という手続きがでるようになるように思います。
実際に「setup.exe」を他機種で実行してみましょう。
すると、以下のように起動時に「インストールするコンポーネント」として「.Net Framework」のセットアップが始まりました。
setup.exe? msi?
インストーラを作ると「setup.exe」と「●●●.msi」の2つのファイルが作られます。
まず環境によっては「msi」は実行できないようです。
参考:http://bbs.wankuma.com/index.cgi?mode=al2&namber=42432&KLOG=73
またドットネットフレームワークのインストールを実行してからインストーラである「msi」を実行するため、「setup.exe」が必要となるようです。
参考:https://kaorun.hatenablog.com/entry/20151219/1450511313
結局2つのファイルをそのまま入れておいてZIP化してまとめてから配布というのがいいのではないかと思います。
リリース版、デバッグ版の管理は?
構成マネージャーから確認・設定するといいです。
EXEがインストール後のフォルダ内に生成されていない?
インストールされたフォルダにEXEがないという不思議な現象がありました。
まだ未解決ですが経緯はこちらにまとめておきます。