このエントリではVisualStudioの拡張のインストーラ/アンインストーラの作り方を解説します。

参考になるMSDNのドキュメント

まずはMSDNから参考になるドキュメントを紹介します。

アドインの登録

方法 : アドインを非アクティブにして削除する

ざっくりと内容を要約すると、VisualStudioに自作のアドインを追加するには、
<マイドキュメント>\Visual Studio 2008\Addins
フォルダに、アドインのアセンブリの位置や、サポート対象としたいVisualStudioのバージョンなどを設定する.AddInファイルを置けば良く、追加したアドインを削除するには、.AddInファイルやアセンブリなど拡張を構成するファイルを削除したうえで、Visual Studioのコマンド プロンプトで、「devenv /resetaddin <拡張のConnectクラスのNamespace.ClassName>」を実行してやれば良い、ということです。

ファイルシステムの設定

imageではインストーラの作成に取り掛かりましょう。

新しいプロジェクトの追加から、「セットアッププロジェクト」を選択して作成します。

まずはファイルシステムへのファイルの配置から。今回の例では、<マイドキュメント>\Visual Studio 2008\Addins以下に、.AddInファイルと、アドインを構成するファイルをまとめたフォルダの二つを配置する構成とします(フォルダにまとめるのは必須ではありません)。

マイドキュメントフォルダは特別なフォルダとして「ユーザーの個人用データフォルダ」に対応していますので、「ユーザーの個人用データフォルダ」以下にVisual Studio 2008フォルダ、更にその下にAddinsフォルダを作成しましょう。

image

更に、このAddinsフォルダ以下には、アドインを構成するファイルをまとめるためのフォルダを追加しましょう。今回の例ではアドインのアセンブリの名前に合わせて、SharpLab.IKnow.ItemBankPanelForVSというフォルダを作成しています。

SharpLab.IKnow.ItemBankPanelForVSには、アドインのアセンブリなどを追加します。アドインのアセンブリを追加した際に、EnvDTEやMicrosoft.VisualStudio.CommandBarsなど、VisualStudioがアドインに対して公開しているアセンブリまで追加されますが、これらはプロパティからExcludeをtrueに設定し、無駄に配置されないようにしましょう。

次に、Addinsフォルダ以下に、.AddInファイルを追加します。.AddInファイルはVisualStudio拡張のプロジェクトをウィザードに沿って作成した時点で自動的に作成されていますので、アドインのプロジェクトフォルダにあるものを追加しましょう。但し、今回の例ではSharpLab.IKnow.ItemBankPanelForVSフォルダにアセンブリなどをまとめたため、ディレクトリ構成が変化しているので、.AddInファイルの中のAssemblyタグの値は、SharpLab.IKnow.ItemBankPanelForVS\SharpLab.IKnow.ItemBankPanelForVS.dllと直す必要があります。

image

ユーザーインターフェイスの設定

インストール先が<マイドキュメント>\Visual Studio 2008\Addins以下に固定されてしまっているので、インストーラのユーザーインターフェイスから、インストール先の選択画面を削除してしまいましょう。なお、これらの編集画面は、セットアッププロジェクトのコンテキストメニューから、「表示」の先をたどっていくことで開くことができます。

image

さて、ここまででインストール時の設定は終わりました。しかし、VisualStudioのアドインのアンインストールでは、アンインストール時に、VisualStudioに追加したUI項目をクリアするために、コマンドを実行してやる必要がありました。以下で、アンインストール時のコマンドの実行について説明します。

カスタム動作の追加

image アンインストール時のコマンドの実行ですが、カスタム動作の追加によって行います。devenv.exeをコマンドライン引数として/resetaddin <拡張のConnectクラスのNamespace.ClassName>をつけて実行するプログラムを書き、これをアンインストール時のカスタム動作として追加します。

以下がそのカスタム動作のプログラムの例です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using Microsoft.Win32;

namespace SharpLab.IKnow.ItemBankPanelForVSUninstallCustomAction {
	class Program {
		static void Main(string[] args) {

			string regKeyName = @"SOFTWARE\Microsoft\VisualStudio\9.0";
			string regValueName = @"InstallDir";
			string className = @"SharpLab.IKnow.ItemBankPanelForVS.Connect";

			try {
				RegistryKey key = Registry.LocalMachine.OpenSubKey(regKeyName);
				string fileName = (string)key.GetValue(regValueName);
				key.Close();
				string filePath = fileName + @"devenv.exe";
				string cmd = "/resetaddin "+ className;
				Process.Start(filePath, cmd);
			}
			catch(Exception exception){
				Console.WriteLine("Uninstall is failed. Please uninstall manually.");
				Console.WriteLine("Error:");
				Console.WriteLine(exception.Message);
				Console.WriteLine("");
				Console.WriteLine("To uninstall, please refer http://msdn.microsoft.com/en-us/library/ms228765(VS.80).aspx");
				Console.WriteLine("This add-in's Namespace.ClassName is " + className);
				Console.WriteLine("");
				Console.WriteLine("Press any key to exit.");
				Console.ReadKey();
			}
		}
	}
}

レジストリキーから、VisualStudioのインストール先を調べてdevenv.exeの位置を出し、/resetaddinオプションを付けて実行しています。

あとは必要に応じてセットアッププロジェクトのプロパティを設定してやれば完成です。