なつかしの Visual Studio Installer（の後継）を現役のVisual Studioで使用する

#はじめに
インストーラーパッケージを作成したいけれど、Install Shield は複雑、かつ無料版は制限だらけ。Wixはよくわからない...、Inno setup などもあるけれど、MS謹製ツールが使いたい。
"Visual Studio Installer"というツールが MSサイトより配布されていましたが、残念ながら Visual Studio 2012 からサポートされなくなってしまいました。一方で Visual Studio 2013 以降向けに、似たインストーラ作成機能が配布されています。

#入手・利用方法
##入手方法
Microsoft の [Visual Studio Market Place](https://marketplace.visualstudio.com/) から "Microsoft Visual Studio 20?? Installer Projects" の名前で入手できます。無料です。
リンク：[2013](https://marketplace.visualstudio.com/items?itemName=UnniRavindranathan-MSFT.MicrosoftVisualStudio2013InstallerProjects) / [2015](https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.MicrosoftVisualStudio2015InstallerProjects) / [2017 & 2019](https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.MicrosoftVisualStudio2017InstallerProjects)

##利用方法
1. 使用しているVisual Studio のバージョンに合った vsix ファイルをダウンロードし、これをダブルクリックするとインストーラーが実行され、"Visual Studio Installer" が Visual Studio の拡張機能としてインストールされます。
2. Visual Studio を起動すると、「その他のプロジェクトの種類」のカテゴリ内に「Visual Studio Installer」が見つかります（※VS2019は後述）。この中から目的のプロジェクトテンプレートを指定して、インストーラープロジェクト（英名 Deployment Project）を作成します。
![p1.png](https://qiita-image-store.s3.amazonaws.com/0/100206/3fe384a2-c6b2-3f9a-b00b-dfcaae14ef68.png)
3. ソリューションエクスプローラーのプロジェクト項目上で右クリックすると "View" と書かれたメニューがあり、ここからUIを追加したり、レジストリエントリを編集したりできます。
 
![p19.png](https://qiita-image-store.s3.amazonaws.com/0/100206/846cffcb-9d51-6125-0c58-a4b30376006e.png)

![p27.png](https://qiita-image-store.s3.amazonaws.com/0/100206/e82a7ef6-0660-701b-5200-52a49e9e38f6.png)

![p22.png](https://qiita-image-store.s3.amazonaws.com/0/100206/d4f36187-9df2-6bd7-18d0-d166bcccc376.png)

![p25.png](https://qiita-image-store.s3.amazonaws.com/0/100206/2a8f4aae-f5f2-6348-fa5a-e54e0dd11c0e.png)

### Visual Studio 2019 の場合
※Visual Studio 2019では、プロジェクト作成画面の検索窓に setup と入力すると表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100206/00feb9f5-40f6-dc5d-ab66-73551ef743b2.png)


#Tips
## インストーラプロジェクトに関するプロパティウインドウの表示方法は？
ソリューションエクスプローラーで、対象のインストーラプロジェクトの項目を選択してからプロパティウインドウを表示させます（他の操作方法もあれば、教えていただけますと嬉しいです！）

## 上書きインストールしようとするとエラーになる
インストーラーを起動して更新しようとすると、こんなエラーメッセージが表示されてしまう場合があります。
「別のバージョンの製品が既にインストールされています。このバージョンのインストールを続行できません。既にインストールされているバージョンの製品を構成、または削除するには、コントロール パネルの [プログラムの追加と削除] アイコンを使用します。」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100206/33603487-912a-86a7-8767-2dcd01865bb1.png)

インストーラプロジェクトのプロパティ "RemovePreviousVersion" を True に設定しておきます。
新バージョン生成ごとに "Version" の値をアップさせ、"ProductCode" を変えるか否か質問されるので、「はい」（変える）を選択します。"UpgradeCode" を同一に保っておくと、インストールウィザードはインストール前に古いバージョンをアンインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100206/512f662d-9047-dbf8-449b-e667b4d37c5c.png)


## SendTo に作成したショートカットアイコンが「送る」に表示されない
このツールでは、特殊フォルダ宛にショートカットアイコンなどを作る機能があり、エクスプローラーの「送る」に相当するフォルダ（いわゆるSendToフォルダ）も対象となっています。
![p2.png](https://qiita-image-store.s3.amazonaws.com/0/100206/804ff923-a192-e7a3-1e84-a88fcafbd62e.png)

ただ、このツールでショートカットアイコンを作成すると「アドバタイズショートカット(advertised shortcut)」として作成されます。「アドバタイズショートカット」として作成されたショートカットは「送る」から表示されません。
表示されるようにするには、ショートカットアイコンを「アドバタイズショートカット」として作成する機能を無効にさせるために、次のいずれかの方法を用います。

1 インストーラー実行時に引数を指定する
（引数を指定して呼び出すバッチファイルを配布すればよいでしょう）

> msiexec /i <msiファイルのパス> DISABLEADVTSHORTCUTS=1

2 "Orca"ツールで、msi ファイルを加工する。
 MS謹製の"Orca"ツールで、インストーラーファイル(.msi) の情報を書き換えることができます。

###Orca入手手順の例
「"Orca.exe"の入手方法」で検索すると、いくつか情報があります。以下は、Windows Server 2003 Platform SDK から入手する方法です。

1. Microsoft社のダウンロードサイトの "Windows® Server 2003 SP1 Platform SDK ISO Install" から、"Platform SDK"のISOイメージをダウンロードします。
2. ダウンロードしたイメージファイルをマウントし、Setupフォルダ内にある "PSDK-SDK_MSI_BIN-common.0.cab" をデスクトップ上などに展開します(cabファイルは、圧縮ファイルですので...)
![p5.png](https://qiita-image-store.s3.amazonaws.com/0/100206/aa4f11c3-fdeb-1d9e-d118-6147e563edfd.png)

3. "Orca_Msi.FD66E721_5AA0_41BC_AA26_1EC8F7FA1175"と名付けられたファイルがあるので、これに拡張子 .msi をつけ、実行させると、Orca のインストールがはじまります。
![p6.png](https://qiita-image-store.s3.amazonaws.com/0/100206/ee9b9a6c-c660-79ac-a2c8-621ee1456f27.png)


###Orcaによる加工手順
1. Visual Studio Installerで作成されたインストーラーを、エクスプローラーから右クリックすると "Edit with Orca" のメニューがあるので、これを選択して開きます（Orca.exe を直接起動して、インストーラーを指定して開いても同じ）
2. 左の "Tables" のなかに "Properties" 項目があるので、これをダブルクリックします。
3. 右側の表を右クリックし、"Add Row"を選択します。
![p3.png](https://qiita-image-store.s3.amazonaws.com/0/100206/3337b0eb-0168-b5dc-6cd2-5c3f37eee1de.png)
4. Propertyに"DISABLEADVTSHORTCUTS"、Valueに"1"を指定してOKをクリックします。
![p7.png](https://qiita-image-store.s3.amazonaws.com/0/100206/125e4977-e2a1-692e-6624-2e51b398df91.png)

5. File->Save で保存します。

##プロパティ設定
セットアッププロジェクトのプロパティ（プロパティグリッド）にセットした値のうち、インストールウィザードでは ProductName と Manufacturer が活かされるようです。（ProductName が、ウィザードやアンインストール情報のタイトルにも、インストール先フォルダ名にも使いまわされているところは微妙...）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100206/f18b8b92-f713-1f16-5799-54b10bc87779.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100206/f3f3986b-eb3e-99fa-8bb1-44902cf67b14.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100206/f354efb7-b6c0-1651-5843-828874986dfd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100206/9614c9aa-7549-4a4f-ccf4-f3485baa465f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100206/3edc5bc5-43b0-4c93-793a-8eac61ebdc29.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100206/c8af1cda-bba6-f9a4-596b-4073a96f3044.png)

ユーザーインターフェースのプロパティから若干加工はできるようですが...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100206/6b1db145-9aa9-80ea-8d66-ff9bef49b326.png)


#参考にした情報
- [アドバタイズショートカットではなく、普通のショートカットを作成する](https://dobon.net/vb/dotnet/deployment/disableadvtshortcuts.html) - DOBON.NET プログラミング道 さん
    [インストーラー関連の情報](http://dobon.net/vb/dotnet/deployment/index.html)が非常に詳しく掲載されています。

- [開発者向け講座－Windows インストーラ](http://www.civil-design.net/free/coach/dev/wi/index.html) - [MKS](http://www.civil-design.net/index.html)さん

- [インストーラーを作成　再度インストールする時の方法](http://bbs.wankuma.com/index.cgi?mode=al2&namber=72836&KLOG=122) - C# と VB.NET の質問掲示板

- [２回目以降のInstallerについて](https://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17573&forum=7) - 旧＠IT会議室 Insider.NET

- [セットアッププロジェクトのUIとカスタム動作の連動](https://qiita.com/magic_xyz/items/8106c7d9db5684d8eb61)