中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

【visual studio】Setup ProjectでProgramDataにファイルを配置する方法

1.概要

visual studioで作成したアプリケーションを配布する際に
【InstallSield】や【InnoSetup】など様々なものがありますが
今回はvisual studio 2012まで標準であった【Setup Project】を使ってみます。
また、【Setip Project】でアプリケーションをパッケージした際に
アプリケーションインストールと同時に、【ProgramData】配下に
必要なファイルやデータを配置したい時があります。
iniファイルや、画像データなどがこれにあたるのではないでしょうか?


開発環境:visual studio2015

2.インストーラーの作成

①【ソリューションエクスプローラー】の【ソリューション名】を右クリックし
 【追加】 → 【新しいプロジェクト】をクリック
f:id:tsu--kun:20190522150604p:plain


②【Setup Project】を選択してOKをクリック
 これで【setup1】というプロジェクトが作成される。
f:id:tsu--kun:20190522150736p:plain


③【ソリューションエクスプローラー】に作成された【setup1】を右クリックし
 【Add】 → 【プロジェクト出力】をクリック
f:id:tsu--kun:20190522153217p:plain


 ④【プライマリ出力】を選択しOKをクリック
 これで【DLL】や【exe】をインストーラーに含んでくれます。
f:id:tsu--kun:20190522153405p:plain
  

 ⑤【セットアッププロジェクト】のプロパティで下記の箇所を変更する。
 【Author】→【コードを書いた人の名前】
 【Manufactuer】→【会社名】
 【ProductName】→【製品名】
 【RemovePreviousVersions】→【True】
 【Title】→【セットアッププロジェクトの名前】

【RemovePreviousVersions】を【True】に設定すると
既に古いバージョンのアプリがインストールされている場合
古いバージョンをアンインストールしてから、新しいバージョンをインストールしてくれます。

 
⑥あとは【セットアッププロジェクト】を右クリックし
 【ビルド】をクリックする。
f:id:tsu--kun:20190522155806p:plain

3.ProgramDataにデータを配置する設定をする

 ①【セットアッププロジェクト】を右クリックし
 【view】→【ファイルシステム】をクリック
f:id:tsu--kun:20190522172907p:plain


②【File System】タブを右クリックし
 【Add Special Folder】→【カスタムフォルダー】をクリック
f:id:tsu--kun:20190522172922p:plain
 

③作成した【カスタムフォルダー】の【プロパティ】を下記のとおり設定
 【AlwaysCreate】→【True】
 【DefaultLocation】→【[CommonAppDataFolder][Manufacturer]\[ProductName]】
 【Property】→【COMMONAPPDATA】
f:id:tsu--kun:20190522172938p:plain


 ④インストールの際に必要なファイルをドラッグドロップで追加する。
f:id:tsu--kun:20190522173041p:plain


 

⑤追加したフォルダの【プロパティ】を変更
 【AlwaysCreate】→【True】

 

4.結果

後は、ビルドしてインストーラーを作成します。
ビルドに成功すると【setup.exe】と【Setup1.msi】が作成されます。

何故ふたつのファイルが作成されるのでしょうか?

このふたつのファイルの違いですが
【msi】は単純にアプリケーションのインストール
【exe】は.net Framework等の必要コンポーネントをインストールしてから【msi】を起動する

といったところです。

作成したインストーラーを実行すると
設定したファイルがProgramData以下にしっかりと配置されています。