Windows GUIプログラミング入門15 インストーラー(1)

# ■はじめに
今回はプログラムをインストーラーで配布できるようにします。

キーワード：VisualStudio2017, InstallerProjects, UAC

[注意]
これまでの回で説明済みの操作方法等は、説明を省略したり簡略化している場合があります。

# ■開発環境
* Windows 10 (バージョン1703)
* Visual Studio Community 2017
* .NET Framework 4.x

# ■拡張機能のインストール
以下のサイトからInstaller Projectsの拡張をダウンロードします。

<i class="fa fa-cloud-download" style="font-size:1em;"></i> [Microsoft Visual Studio 2017 Installer Projects](https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.MicrosoftVisualStudio2017InstallerProjects)

![wbg15-01.png](https://qiita-image-store.s3.amazonaws.com/0/142879/2a28fe7f-d0c5-b541-d140-48a072c8fd03.png)

インストールします。
![wbg15-02.png](https://qiita-image-store.s3.amazonaws.com/0/142879/56f303f6-504f-01ea-527c-f4bb91c15778.png)


# ■インストーラープロジェクトの追加
適当に何かプロジェクトを作り、ソリューションの「追加」 - 「新しいプロジェクト」を選択します。
![wbg15-03.png](https://qiita-image-store.s3.amazonaws.com/0/142879/29d7624e-9742-b04f-3bde-29731568cf64.png)


「新しいプロジェクトの追加」画面で「その他のプロジェクトの種類」 - 「Visual Studio Installer」を選択し、「Setup Wizard」を選択します。
![wbg15-04.png](https://qiita-image-store.s3.amazonaws.com/0/142879/160f7bb6-f74e-2c23-14c8-149860bd0f46.png)


「次へ」を選択します。
![wbg15-05.png](https://qiita-image-store.s3.amazonaws.com/0/142879/ed40d248-edcd-3030-f6e2-5e7eb8bcf2a0.png)


「次へ」を選択します。
![wbg15-06.png](https://qiita-image-store.s3.amazonaws.com/0/142879/09397bc7-bd92-c658-3403-04c032d71717.png)


「プライマリ出力」を選択し、「次へ」を選択します。
![wbg15-07.png](https://qiita-image-store.s3.amazonaws.com/0/142879/7101ab99-0797-a0fc-c8d4-4a4f9a803b8f.png)


「次へ」を選択します。
![wbg15-08.png](https://qiita-image-store.s3.amazonaws.com/0/142879/b6c94560-d74c-a780-1964-c8536efefa9a.png)


「完了」を選択します。
![wbg15-09.png](https://qiita-image-store.s3.amazonaws.com/0/142879/472c43aa-a12c-175a-cd4d-2c63f8865be4.png)

インストーラープロジェクトが追加されました。
![wbg15-10.png](https://qiita-image-store.s3.amazonaws.com/0/142879/b98fbcce-717b-aae9-b219-30f76efb684f.png)


# ■インストーラープロジェクトの設定

## ◇ビルド設定

ソリューションを右クリック、「構成マネージャー」を選択し、インストーラープロジェクトの「ビルド」にチェックを入れます。
![wbg15-11.png](https://qiita-image-store.s3.amazonaws.com/0/142879/ac937d8c-9621-a4f1-3816-8bf94963a6c8.png)


ソリューションエクスプローラーの`Detected Dependencies`から`Microsoft .NET Framework`以外（使わないもの）を右クリックして「除外」します。
![wbg15-12.png](https://qiita-image-store.s3.amazonaws.com/0/142879/020b82aa-eddf-8f4c-55a6-eceada416a4a.png)

![wbg15-12b.png](https://qiita-image-store.s3.amazonaws.com/0/142879/e57064e5-3e97-2a52-9ce3-448d3b07f364.png)


インストーラープロジェクトのプロパティ、`PostBuildEvent`の「`...`」を選択します。
![wbg15-12c.png](https://qiita-image-store.s3.amazonaws.com/0/142879/bd89f460-a60a-5da9-6759-9fa8ecd4a39a.png)

↓

![wbg15-12d.png](https://qiita-image-store.s3.amazonaws.com/0/142879/34d62411-ca58-99e5-b86a-b82752dcdf6f.png)


「マクロ」ボタンを選択して`BuildOutputPath`をダブルクリックします。
![wbg15-12e.png](https://qiita-image-store.s3.amazonaws.com/0/142879/bc7039fa-7281-93da-b3b5-4a87ab64880c.png)


以下のように書き換えます。
`"C:\Program Files (x86)\Windows Kits\10\bin\x86\MsiInfo.exe" "$(BuiltOuputPath)" /W 10`
![wbg15-12f.png](https://qiita-image-store.s3.amazonaws.com/0/142879/1bf3e41b-011f-4fdc-c2e8-43bf05f0df92.png)


`MsiInfo`のパスは環境に応じて書き換えてください。
パスは、`Developer Command Prompt for VS 2017`（開発者コマンドプロンプト）を起動し、
![wbg15-12g.png](https://qiita-image-store.s3.amazonaws.com/0/142879/7b5e5828-7f22-ad33-6e32-1e2f502a2c77.png)

`where msiinfo`で[確認](http://qiita.com/Kosen-amai/items/33f6edf887be272ab25d "Winメモ　このコマンドはどこにある？")しましょう。

※Windows 10で`msiinfo`が見つからない場合、`Visual Studio Installer`で`個別のコンポーネント`から`Windows 10 SDK`を入れてください。

`PostBuildEvent`はビルド後に実行される処理で、
MSIファイルを管理者権限不要でインストールできるように設定変更するコマンドを書いています。

※`Program Files`配下にインストールする等、管理者権限が必要なセットアップにしてしまった場合はMSIファイルの設定を変えても管理者権限は要求されます。

## ◇プロパティ設定


`File System`タブの`Application Folder`を選択し、プロパティの`DefaultLocation`を
`[LocalAppDataFolder][Manufacturer]\[ProductName]`に設定します。
![wbg15-13.png](https://qiita-image-store.s3.amazonaws.com/0/142879/08ddb852-7ee3-3d8a-6210-c7ed19ec436b.png)


ソリューションエクスプローラーでインストーラープロジェクトを選択し、プロパティを設定します。
![wbg15-14.png](https://qiita-image-store.s3.amazonaws.com/0/142879/25fbdbc1-7dd0-188a-7e67-d095af74f247.png)


| プロパティ | 設定値 | 備考 |
|:--|:--|:--|
| Auther  | 作成者A  ||
| Description  | 説明BBB  ||
| DetectNewerInstalledVersion  | True  | インストール時の新バージョンチェック |
| InstallAllUsers  | False  | すべてのユーザーにインストールするか |
| Localization  | Japanese  ||
| Manufacturer  | 会社C  ||
| ProductName  | ソフトD  ||
| RemovePreviousVersions  | True  | 古いバージョンの削除 |
| Subject  | タイトルE  ||
| Title  | タイトルFF  ||
| Version  | 1.0.0  ||

## ◇デスクトップのショートカット

`File System`タブの`User's Desktop`を選択し、プロパティの`AlwaysCreate`を`True`に設定します。
![wbg15-15.png](https://qiita-image-store.s3.amazonaws.com/0/142879/83fecaf7-da4c-c168-b37f-56d78c30d8d1.png)


`User's Desktop`を選択し、ツリー右の部分（`Name`, `Type`列のある領域）で右クリックし、「新しいショートカットの作成」を選択します。
![wbg15-16.png](https://qiita-image-store.s3.amazonaws.com/0/142879/b4a3d6bb-68b9-06ec-7eb9-b76f9e4e9771.png)


`Application Folder`をダブルクリックします。
![wbg15-17.png](https://qiita-image-store.s3.amazonaws.com/0/142879/138b6e1c-0a0f-9115-e460-d558d472943c.png)


「プライマリ出力」が選択されているので「OK」を選択します。
![wbg15-18.png](https://qiita-image-store.s3.amazonaws.com/0/142879/394e804b-8a33-f3c9-b829-98b2d0a290a4.png)


ショートカットの名前を`ソフトD`に変更します。
![wbg15-19.png](https://qiita-image-store.s3.amazonaws.com/0/142879/8a830b70-d425-1cb1-8bab-f3d3a665db3e.png)

↓

![wbg15-20.png](https://qiita-image-store.s3.amazonaws.com/0/142879/a475567b-be7d-037c-d334-a3e9f657508e.png)


## ◇スタートメニューのショートカット

`User's Programs Menu`を右クリックし、「Add」 - 「Folder」を選択します。
![wbg15-21.png](https://qiita-image-store.s3.amazonaws.com/0/142879/6ff14990-05c2-0497-3a6a-a72375178599.png)


フォルダ名を`グループG`に変更し、`AlwaysCreate`を`True`にし、グループGの右の領域で右クリック、「新しいショートカットの作成」を選択します。
![wbg15-22.png](https://qiita-image-store.s3.amazonaws.com/0/142879/20610f48-0ff6-3e98-aa86-bcb278c143f3.png)


`User's Desktop`の時と同じように設定します。
![wbg15-23.png](https://qiita-image-store.s3.amazonaws.com/0/142879/c6f2a17a-e441-5f5a-47b2-ce5c26ae045e.png)


# ■ビルド
ソリューションをReleaseビルドします。
`Setup.exe`と`msi`ファイルが出来上がるので、この2つを配布します。
![wbg15-30.png](https://qiita-image-store.s3.amazonaws.com/0/142879/15327563-9594-78be-1b62-99ee10999c9a.png)

# ■インストール
一般ユーザーで`Setup.exe`を実行してみます。

「次へ」を選択します。
![wbg15-31.png](https://qiita-image-store.s3.amazonaws.com/0/142879/fed13f27-788b-87a4-1881-6af6e28521c4.png)

「次へ」を選択します。
![wbg15-32.png](https://qiita-image-store.s3.amazonaws.com/0/142879/384aec4d-8453-f3d0-e63e-a201e51513c4.png)

「次へ」を選択します。
![wbg15-33.png](https://qiita-image-store.s3.amazonaws.com/0/142879/9cd63baa-a062-b200-9d14-5c865ac1a9d6.png)

「閉じる」を選択します。
![wbg15-34.png](https://qiita-image-store.s3.amazonaws.com/0/142879/b760d915-0c03-da05-2c1d-e667aec58104.png)

デスクトップとスタートメニューにショートカットが作成されました。
UACのダイアログを出さずにインストールすることができました。
![wbg15-35.png](https://qiita-image-store.s3.amazonaws.com/0/142879/6bc6537b-baee-b779-c73e-130a9894c415.png)

ユーザーの`Local`フォルダ配下にインストールされています。
![wbg15-36.png](https://qiita-image-store.s3.amazonaws.com/0/142879/b603e06d-7af1-52c3-975b-f10e9b59e04a.png)

「アプリと機能」の一覧に追加されました。
![wbg15-37.png](https://qiita-image-store.s3.amazonaws.com/0/142879/776cba34-b79b-d7af-e0b1-adcde5269206.png)

# ■バージョンアップ
メインのプロジェクトを更新してバージョン情報も更新します。
（プロジェクトのプロパティ、「アプリケーション」の「アセンブリ情報」）
![wbg15-40.png](https://qiita-image-store.s3.amazonaws.com/0/142879/ca08661b-6117-f0c3-af62-636c51df6b30.png)

インストーラープロジェクトの`Version`プロパティを更新します。
`ProductCode`を更新するか聞いてくるので「はい」を選択し、ソリューションをリリースビルドします。
![wbg15-41.png](https://qiita-image-store.s3.amazonaws.com/0/142879/40248d24-4b42-2a52-619e-b069257ef957.png)

`Setup.exe`を起動してインストールすると新しいバージョンで上書きされます。
![wbg15-42.png](https://qiita-image-store.s3.amazonaws.com/0/142879/7b143305-877e-fb50-be40-69959cfaf990.png)

:bulb:バージョンアップ時、上書きインストールできて最新版が起動できることは必ず確認しましょう。
設定を失敗していると、インストールが続行できなかったり、一見インストール成功したように見えても中身が古いバージョンのままになることもあります。

おしまい

---

[＜＜ 最初の記事](http://qiita.com/Kosen-amai/items/f9e3df2aa80363f5af5b "Windows GUIプログラミング入門1 メッセージボックス表示") 　 [＜ 前の記事](http://qiita.com/Kosen-amai/items/58e597c98967ca34ecd1 "Windows GUIプログラミング入門14 処理中表示") 　 [次の記事 ＞](https://qiita.com/Kosen-amai/items/02208712c8cac15ef995 "Windows GUIプログラミング入門16 アラーム")