hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

Visual C++2010ランタイムをインストーラに含める方法

EBWin4はVisual Studio 2010 のC#C++で開発しているため、実行には.Net Framework 4.0とVisual C++ 2010 ランタイムが要る。
.Net Framework 4はWindows Vista以降は標準でWindowsに含まれているため、通常はインストールの必要はない。
だがVisual C++ 2010 ランタイムは Windows に含まれていないため、別途ユーザに「Visual C++ 2010 再配布可能パッケージ(x86)」をインストールしてもらわないといけない。やっかいなことに、Visual C++ はバージョンごとにランタイムが違い、さらに32bit(x86)版と64bit版(x64)が存在する。EBWin4のREADMEには対応するバージョンの再配布可能パッケージのリンクが書いてあるが、利用者にとって敷居が高いことは事実である。

これまでインストーラにはフリーの Inno Setup を使っていたが、Visual Studioインストーラを使用すれば、必須コンポーネントをインターネットから自動インストールするようにできるので、今回からインストーラを変更することにした。

Visual Studioインストーラの作り方

  • セットアップの追加→新しいプロジェクト→その他のプロジェクトの種類→セットアップと配置
  • ここでInstallShield LEとVisual Studio インストーラーが選択できるので、Visual Studio インストーラーを選択
  • セットアップウィザードで各プロジェクトの「プライマリ出力」「ローカライズされたリソース」「サテライトDLL」を全て選択。これでセットアッププロジェクトが生成される。
  • インストーラに含める追加ファイルやアイコンを追加してセットアッププロジェクトを完成させる。
  • セットアップのプロパティ→構成プロパティ→必須コンポーネント

ここでインストールする必須コンポーネントVisual Studio 2010ランタイムライブラリ(x86)を追加する。(なお、必須コンポーネントインストーラに含めるか、インターネットからダウンロードするかを選ぶことができる。)

  • セットアップをビルドすると、setup.exeと<プロジェクト名>.msiの2つのファイルができる。

インストーラの本体は.msiだが、setup.exeはコンピュータに必須コンポーネントがあるかどうかを調べ、インストールされていなければ次のような画面が出て、インターネットからダウンロードしてインストールまで行う。

これで起動トラブルは減ると思う。

ここで一つ問題があって、Visual Studio 2010にはSP1が提供されており、2010無印と 2010 SP1とでランタイムライブラリが異なる。再配布可能パッケージも2010無印と2010 SP1の2種類が存在する。
Download Microsoft Visual C++ 2010 再頒布可能パッケージ (x86) from Official Microsoft Download Center
Download Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86) from Official Microsoft Download Center
ユーザのコンピューターにVisual C++ 2010 SP1のランタイムが先に入っていた場合、 「より新しいバージョンのMicrosoft Visual C++ Redistributableがコンピューター上で検出されました」 と表示されてインストールが止まってしまう。
この場合は.msiを実行していただければ、EBWin4の本体だけインストールされる。

Visual Studio 2015 Installer Projects

Visual Studioインストーラはその後、Visual Studio 2012 で削除されてInstallShield LEだけになったが、 Visual Studio 2013から復活した。ただしVisual Studio Marketplaceから別途インストールする必要がある。現在のVisual Studio Community 2015でも使用できる。

Microsoft Visual Studio 2013 Installer Projects の設定方法について - マコーの日記
Microsoft Visual Studio 2015 Installer Projects をインストールする (Visual Studioの使い方 Tips)

補足:Inno setup でVisual C++ ランタイムを自動インストールする方法

なお、Inno setup でもスクリプトを書けば、Visual C++ Redistribuableのインストール有無をチェックして自動インストールすることができる。
inno setup - How to make vcredist_x86 reinstall only if not yet installed? - Stack Overflow
ただし、vcredist_x86.exeはあらかじめダウンロードしてパッケージに含めなければならない。