次の方法で共有


正常性ルールを登録するフィーチャーを作成する

最終更新日: 2009年9月23日

適用対象: SharePoint Foundation 2010

新しい正常性ルールをインストールするには、そのルールを SharePoint Health Analyzer に登録します。これを行うには、まず、ルールが含まれるアセンブリを各コンピューターのグローバル アセンブリ キャッシュ (GAC) に配置して、次に SPHealthAnalyzer クラスの RegisterRules(Assembly) メソッドを呼び出す必要があります。

開発環境で作業している場合は、グローバル アセンブリ キャッシュ ツール (Gacutil.exe) を使用してアセンブリを GAC に配置し、その後、そのアセンブリを読み込んでルールを登録するためのカスタム コードを書くことができます。運用環境では、より堅牢な手順を使用する必要があります。ただし、この場合、サーバー ファーム管理者などの他のユーザーがルールをインストールする可能性があります。また、多くの場合、ルールは開発で使用しているサーバーだけでなく複数のサーバーにインストールされます。

運用環境の SharePoint Health Analyzer にルールを登録するための最適な方法は、専用の SharePoint フィーチャーを作成することです。この方法の重要なポイントは、FeatureActivatedFeatureDeactivating イベントのイベント ハンドラーをルール アセンブリの一部として含めることです。サーバー ファーム管理者がフィーチャーをインストールすると、イベント ハンドラーがシステムに登録されます。ファーム管理者がフィーチャーをアクティブにするときに、FeatureActivated イベント ハンドラー内のコードで RegisterRules(Assembly) メソッドを呼び出してルールを登録できます。サーバー ファーム管理者がフィーチャーを非アクティブにするときに、FeatureDeactivating イベント ハンドラー内のコードで UnregisterRules(Assembly) メソッドを呼び出してルールを削除できます。

このトピックでは、ルールの登録と登録解除を行うイベント ハンドラーの作成方法、およびイベント ハンドラーとルール アセンブリをファーム レベルのフィーチャーに含める方法について説明します。フィーチャーの展開方法と GAC へのルール アセンブリのインストール方法の詳細については、「[方法] ソリューション パッケージで正常性ルールを展開する」を参照してください。

正常性ルールの登録と登録解除を行うイベント ハンドラーを作成するには

  1. [スタート] メニューで Visual Studio を右クリックし [管理者として実行] を選択して、Visual Studio を管理者として実行します。

  2. 正常性ルールのコードを含むプロジェクトを開きます。

  3. 新しいクラスをプロジェクトに追加します。

    [ソリューション エクスプローラー] で、プロジェクト名を選択し、[追加]、[新しいアイテム] の順に選択します。[新しいアイテムの追加] ダイアログで [クラス] テンプレートを選択します。クラスの名前を「RuleFeatureReceiver」にします。次に、[追加] をクリックします。

  4. 次の例のように、using ステートメント (Visual Basic では Imports) を追加して名前空間を指定します。

    using System;
    using System.Collections.Generic;
    using System.Reflection;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Administration.Health;
    
    Imports System
    Imports System.Collections.Generic
    Imports System.Reflection
    Imports Microsoft.SharePoint
    Imports Microsoft.SharePoint.Administration.Health
    
  5. クラスが SPFeatureReceiver クラスから継承されるようにクラス定義を変更します。

    class RuleFeatureReceiver : SPFeatureReceiver
    
    Public Class RuleFeatureReceiver
        Inherits SPFeatureReceiver
    
  6. 次の例のように、FeatureActivated(SPFeatureReceiverProperties) メソッドを上書きして実装します。

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        Assembly a = Assembly.GetExecutingAssembly();
        IDictionary<Type, Exception> exceptions = SPHealthAnalyzer.RegisterRules(a);
    
        if (exceptions != null)
        {
            string logEntry = a.FullName;
            if (exceptions.Count == 0)
            {
                logEntry += " All rules were registered.";
            }
            else
            {
                foreach (KeyValuePair<Type, Exception> pair in exceptions)
                {
                    logEntry += string.Format(" Registration failed for type {0}. {1}",
                                              pair.Key, pair.Value.Message);
                }
            }
            System.Diagnostics.Trace.WriteLine(logEntry);
        }
    }
    
    Public Overrides Sub FeatureActivated(ByVal properties As Microsoft.SharePoint.SPFeatureReceiverProperties)
    
        Dim a As Assembly = Assembly.GetExecutingAssembly()
        Dim exceptions As IDictionary(Of Type, Exception) = SPHealthAnalyzer.RegisterRules(a)
    
        If Not exceptions Is Nothing Then
            Dim logEntry As String = a.FullName
            If exceptions.Count = 0 Then
                logEntry += " All rules were registered."
            Else
                Dim pair As KeyValuePair(Of Type, Exception)
                For Each pair In exceptions
                    logEntry += String.Format(" Registration failed for type {0}. {1}", _
                                                  pair.Key, pair.Value.Message)
                Next
            End If
            System.Diagnostics.Trace.WriteLine(logEntry)
        End If
    
    End Sub
    
  7. 次の例のように、FeatureDeactivating(SPFeatureReceiverProperties) メソッドを上書きして実装します。

    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        Assembly a = Assembly.GetExecutingAssembly();
        IDictionary<Type, Exception> exceptions = SPHealthAnalyzer.UnregisterRules(a);
    
        if (exceptions != null)
        {
            string logEntry = a.FullName;
            if (exceptions.Count == 0)
            {
                logEntry += " All rules were unregistered.";
            }
            else
            {
                foreach (KeyValuePair<Type, Exception> pair in exceptions)
                {
                    logEntry += string.Format(" Unregistration failed for type {0}. {1}",
                                              pair.Key, pair.Value.Message);
                }
            }
            System.Diagnostics.Trace.WriteLine(logEntry);
        }
    }
    
    Public Overrides Sub FeatureDeactivating(ByVal properties As Microsoft.SharePoint.SPFeatureReceiverProperties)
    
        Dim a As Assembly = Assembly.GetExecutingAssembly()
        Dim exceptions As IDictionary(Of Type, Exception) = SPHealthAnalyzer.UnregisterRules(a)
    
        If Not exceptions Is Nothing Then
            Dim logEntry As String = a.FullName
            If exceptions.Count = 0 Then
                logEntry += " All rules were unregistered."
            Else
                Dim pair As KeyValuePair(Of Type, Exception)
                For Each pair In exceptions
                    logEntry += String.Format(" Unregistration failed for type {0}. {1}", _
                                                  pair.Key, pair.Value.Message)
                Next
            End If
            System.Diagnostics.Trace.WriteLine(logEntry)
        End If
    
    End Sub
    
  8. プロジェクトをビルドします。

正常性ルールをインストールするフィーチャーを作成するには

  1. Features フォルダーを作成します。

    [ソリューション エクスプローラー] で、プロジェクト名を右クリックし、[追加] を選択して、[新しいフォルダー] を選択します。「Features」と入力します。

  2. 自分のフィーチャー用のサブフォルダーを作成します。

    [Features] フォルダーを右クリックし、[追加] を選択して、[新しいフォルダー] を選択します。フィーチャーの名前を入力します (「CompanyName.HealthRules」など)。

    後で、ソリューション パッケージを作成してフィーチャーを展開するときに、同じ名前のフォルダーがサーバー ファーム内の各サーバーの %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES フォルダーに作成されます。フォルダーに指定した名前を参考にして管理者はフィーチャーの定義ファイルを検索します。

  3. フィーチャー定義ファイルを作成します。

    自分のフィーチャー用のサブフォルダーを右クリックし、[追加]、[新しいアイテム] の順に選択します。[新しいアイテム追加] ダイアログで、[XML ファイル] テンプレートを選択します。ファイルの名前を「Feature.xml」にします。次に、[追加] をクリックします。

  4. Feature.xml をエディターで開きます。

  5. ファイルの 1 行目のみを削除します。その場所に、次のコードを貼り付けます。

    <Feature xmlns="https://schemas.microsoft.com/sharepoint/"
             Scope="Farm"
             Hidden="FALSE"
             Title="Your Title"
             Description="Your description"
             Id="00000000-0000-0000-0000-000000000000"
             ReceiverAssembly="<assembly name>, Version=<number>, Culture=<culture>, PublicKeyToken=<token>"
             ReceiverClass="MyNamespace.RuleFeatureReceiver"
             AlwaysForceInstall="TRUE"
             ImageUrl=""/>
    
  6. Feature.xml で、Title と Description 属性の値を独自のテキストで置き換えます。

  7. Id 属性の値を、新しく生成した GUID で置き換えます (かっこなし)。

    GuidGen ツール (guidgen.exe) を使用して、新しい GUID を取得します。Visual Studio の [ツール] メニューで、[GUID の作成] を選択します。[Create GUID] ダイアログで、[4. Registry Format] を選択して、[Copy] をクリックします。クリップボードの内容を、Id 属性の後の引用符の間に貼り付けます。GUID からかっこを削除します。

  8. ReceiverAssembly 属性の値を、4 つの部分で構成される完全なアセンブリ名で置き換えます。

    アセンブリの完全な名前を取得する方法の詳細については、「[方法] アセンブリの完全な名前を取得するツールを作成する」を参照してください。

  9. ReceiverClass 属性の値を、名前空間で修飾された、SPFeatureReceiver サブクラスの名前に置き換えます。

  10. ファイルを保存します。

フィーチャーの展開方法の詳細については、「[方法] ソリューション パッケージで正常性ルールを展開する」を参照してください。

関連項目

タスク

[方法] ソリューション パッケージで正常性ルールを展開する

[方法] アセンブリの完全な名前を取得するツールを作成する

概念

フィーチャーの使用