正常性ルールを登録するフィーチャーを作成する
最終更新日: 2009年9月23日
適用対象: SharePoint Foundation 2010
新しい正常性ルールをインストールするには、そのルールを SharePoint Health Analyzer に登録します。これを行うには、まず、ルールが含まれるアセンブリを各コンピューターのグローバル アセンブリ キャッシュ (GAC) に配置して、次に SPHealthAnalyzer クラスの RegisterRules(Assembly) メソッドを呼び出す必要があります。
開発環境で作業している場合は、グローバル アセンブリ キャッシュ ツール (Gacutil.exe) を使用してアセンブリを GAC に配置し、その後、そのアセンブリを読み込んでルールを登録するためのカスタム コードを書くことができます。運用環境では、より堅牢な手順を使用する必要があります。ただし、この場合、サーバー ファーム管理者などの他のユーザーがルールをインストールする可能性があります。また、多くの場合、ルールは開発で使用しているサーバーだけでなく複数のサーバーにインストールされます。
運用環境の SharePoint Health Analyzer にルールを登録するための最適な方法は、専用の SharePoint フィーチャーを作成することです。この方法の重要なポイントは、FeatureActivated と FeatureDeactivating イベントのイベント ハンドラーをルール アセンブリの一部として含めることです。サーバー ファーム管理者がフィーチャーをインストールすると、イベント ハンドラーがシステムに登録されます。ファーム管理者がフィーチャーをアクティブにするときに、FeatureActivated イベント ハンドラー内のコードで RegisterRules(Assembly) メソッドを呼び出してルールを登録できます。サーバー ファーム管理者がフィーチャーを非アクティブにするときに、FeatureDeactivating イベント ハンドラー内のコードで UnregisterRules(Assembly) メソッドを呼び出してルールを削除できます。
このトピックでは、ルールの登録と登録解除を行うイベント ハンドラーの作成方法、およびイベント ハンドラーとルール アセンブリをファーム レベルのフィーチャーに含める方法について説明します。フィーチャーの展開方法と GAC へのルール アセンブリのインストール方法の詳細については、「[方法] ソリューション パッケージで正常性ルールを展開する」を参照してください。
正常性ルールの登録と登録解除を行うイベント ハンドラーを作成するには
[スタート] メニューで Visual Studio を右クリックし [管理者として実行] を選択して、Visual Studio を管理者として実行します。
正常性ルールのコードを含むプロジェクトを開きます。
新しいクラスをプロジェクトに追加します。
[ソリューション エクスプローラー] で、プロジェクト名を選択し、[追加]、[新しいアイテム] の順に選択します。[新しいアイテムの追加] ダイアログで [クラス] テンプレートを選択します。クラスの名前を「RuleFeatureReceiver」にします。次に、[追加] をクリックします。
次の例のように、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
クラスが SPFeatureReceiver クラスから継承されるようにクラス定義を変更します。
class RuleFeatureReceiver : SPFeatureReceiver
Public Class RuleFeatureReceiver Inherits SPFeatureReceiver
次の例のように、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
次の例のように、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
プロジェクトをビルドします。
正常性ルールをインストールするフィーチャーを作成するには
Features フォルダーを作成します。
[ソリューション エクスプローラー] で、プロジェクト名を右クリックし、[追加] を選択して、[新しいフォルダー] を選択します。「Features」と入力します。
自分のフィーチャー用のサブフォルダーを作成します。
[Features] フォルダーを右クリックし、[追加] を選択して、[新しいフォルダー] を選択します。フィーチャーの名前を入力します (「CompanyName.HealthRules」など)。
後で、ソリューション パッケージを作成してフィーチャーを展開するときに、同じ名前のフォルダーがサーバー ファーム内の各サーバーの %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES フォルダーに作成されます。フォルダーに指定した名前を参考にして管理者はフィーチャーの定義ファイルを検索します。
フィーチャー定義ファイルを作成します。
自分のフィーチャー用のサブフォルダーを右クリックし、[追加]、[新しいアイテム] の順に選択します。[新しいアイテム追加] ダイアログで、[XML ファイル] テンプレートを選択します。ファイルの名前を「Feature.xml」にします。次に、[追加] をクリックします。
Feature.xml をエディターで開きます。
ファイルの 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=""/>
Feature.xml で、Title と Description 属性の値を独自のテキストで置き換えます。
Id 属性の値を、新しく生成した GUID で置き換えます (かっこなし)。
GuidGen ツール (guidgen.exe) を使用して、新しい GUID を取得します。Visual Studio の [ツール] メニューで、[GUID の作成] を選択します。[Create GUID] ダイアログで、[4. Registry Format] を選択して、[Copy] をクリックします。クリップボードの内容を、Id 属性の後の引用符の間に貼り付けます。GUID からかっこを削除します。
ReceiverAssembly 属性の値を、4 つの部分で構成される完全なアセンブリ名で置き換えます。
アセンブリの完全な名前を取得する方法の詳細については、「[方法] アセンブリの完全な名前を取得するツールを作成する」を参照してください。
ReceiverClass 属性の値を、名前空間で修飾された、SPFeatureReceiver サブクラスの名前に置き換えます。
ファイルを保存します。
フィーチャーの展開方法の詳細については、「[方法] ソリューション パッケージで正常性ルールを展開する」を参照してください。
関連項目
タスク
[方法] ソリューション パッケージで正常性ルールを展開する