MMCでHello World

ようやくHello Worldまで出来たっぽいので書いてみます.
ところでMMCってなんなのか?については
http://www.atmarkit.co.jp/fwin2k/operation/mmccons/mmccons_01.html
↑を見ればよいわけですが,僕自身はMMCをよく使っています。
使い方を簡単に説明すると,

  1. 「ファイル名を指定して実行...」でmmc.exeと打ち込んでMMCを起動します
  2. メニューの「ファイル」−「スナップインの追加と削除...」でスナップインを追加します.たとえば「イベントビューア」とか「サービス」とか,日頃よく使うものを選択します
  3. メニューの「ファイル」−「名前を付けて保存...」でMMCの設定情報を保存します.自分はよく,Toolkitという名前でデスクトップに保存しておきます(要はランチャーみたいなもの)

そんなわけで,これから作るMMCスナップインはMMCでホストされるように作る必要がある,というところがポイントですね.

Windows SDKのインストール

MMCの最新版は3.0です.検索すると以下のサイトにまとまった情報がのっているようです.
http://msdn2.microsoft.com/en-us/library/ms692740.aspx
ただここを読むだけだと,なにをインストールしたらよいかよくわかりません.で,さらに検索すると,どうもこれをインストールすれば良さそうだということがわかりました.
http://www.microsoft.com/downloads/details.aspx?FamilyId=C2B1E300-F358-4523-B479-F53D234CDCCF&displaylang=en

Microsoft.ManagementConsoleの参照設定を設定する

Microsoft.ManagementConsoleというのがMMC 3.0で中核となるコンポーネントのようで,Windows SDKをインストールするとGACに登録されます.MMCスナップインを作るには,プロジェクトの参照設定にMicrosoft.ManagementConsoleを加える必要があります.
クラスライブラリのプロジェクトを作成し,参照設定をVisual Studioで行おうと思ったのですが,これに最も苦労しました.通常参照設定で「.NET」タブを選択すると,その中に必要となるアセンブリが含まれているものなんですが,どうも今回それが見当たりません.
いろいろ試行錯誤して,よい方法かどうかわからないのだけど,とりあえずGACに放り込まれたアセンブリを外に出して,それを参照設定するようにしました.具体的には,コマンドプロンプトでC:\Windows\assembly\GAC_MSIL\Microsoft.ManagementConsole\以下のDLLが格納されたディレクトリに移動し,Copyコマンドで適当な場所にコピーしました.

Hello World

あとは,
http://msdn2.microsoft.com/en-us/library/ms692759.aspx
にしたがって実装していきます.詳細はいま勉強中です(^^;;
実装はこんな感じ

using Microsoft.ManagementConsole;
using System.ComponentModel;
using System;
using System.Security.Permissions;

[assembly: PermissionSetAttribute(SecurityAction.RequestMinimum, Unrestricted = true)]
namespace Microsoft.ManagementConsole.Samples
{
  [RunInstaller(true)]
  public class InstallUtilSupport : SnapInInstaller
  {
  }

  [SnapInSettings("{CFAA3895-4B02-4431-A168-A6416013C3DD}",
     DisplayName = "- Simple SnapIn Sample",
     Description = "Simple Hello World SnapIn")]
  public class SimpleSnapIn : SnapIn
  {
    public SimpleSnapIn()
    {
      this.RootNode = new ScopeNode();
      this.RootNode.DisplayName = "Hello World";
    }
  }
}

ビルドするとSimpleSnapInSample.dllが出来上がっているので,InstallUtil.exeに食わせます.コマンドプロンプト

InstallUtil.exe SimpleSnapInSample.dll

とすると,MMCスナップインがシステム(というかレジストリ?)に登録されます.あとはご自身のToolkitにでも入れてみてくださいね.