VS 2005、C# 2.0、.NET 2.0/3.0、Win2003
MultiInstance の一連のパフォーマンス カウンターをインストールしようとしています。一部のシステム パフォーマンス カウンター カテゴリでは、他にインスタンスがない場合でも「合計」を維持していることに気付きました。ASP.NET Apps 2.0.50727 は一例です。
だから私はこれを複製しようとしてきました。インストーラー クラスで次のルーチンを作成し、セットアップ プロジェクトのカスタム アクションに追加します。
public override void Install(System.Collections.IDictionary stateSaver)
{
//Debugger.Break();
CounterCreationData data = new CounterCreationData("ZCounter", "ZCtrHelp", PerformanceCounterType.NumberOfItems32);
PerformanceCounterCategory.Create("ZCategory", "ZCatHelp", PerformanceCounterCategoryType.MultiInstance, new CounterCreationDataCollection(new CounterCreationData[] { data }));
PerformanceCounter counter = new PerformanceCounter();
counter.CategoryName = "ZCategory";
counter.CounterName = "ZCounter";
counter.InstanceName = "ZTotal";
counter.InstanceLifetime = PerformanceCounterInstanceLifetime.Global;
counter.ReadOnly = false;
counter.RawValue = 0;
base.Install(stateSaver);
}
行のコメントを外してDebugger.Break()
ステップ実行すると、正しいインスタンス名でカウンターが実際に作成されていることがわかります。また、Visual Studio サーバー エクスプローラーには、InstanceLifetime が Global に設定されたインスタンスが表示されます。セットアップ プログラムで RemoveInstance() メソッドを呼び出しません。
それでも、セットアップ プログラムが完了してから数秒後に、そのインスタンスはパフォーマンス モニターと VS サーバー エクスプローラーから消えます。どうすればくっつきますか?それともできますか?