VS2008 と Vista で正常に動作するプログラムがありますが、Windows 7 と VS2010 / .NET Framework 4.0 で試していますが、動作しません。最終的な問題は、System.Diagnostics.PerformanceCounterCategory.GetCategories() (およびその他の PerformanceCounterCategory メソッド) が機能していないことです。System.InvalidOperationException が発生し、「レジストリから無効なインデックスが読み取られたため、カウンター名データを読み込めません」というメッセージが表示されます。
以下に示す非常に単純なプログラムでこれを再現できます。
class Program
{
static void Main(string[] args)
{
foreach (var pc in System.Diagnostics.PerformanceCounterCategory.GetCategories())
{
Console.WriteLine(pc.CategoryName);
}
}
}
プログラムを管理者として実行していることを確認しました。VS/デバッガーを接続して実行するかどうかは関係ありません。テストする Windows 7 または VS2010 を搭載した別のマシンがないため、どちらが複雑になっているのか (またはその両方) がわかりません。これは Windows 7 x64 であり、アプリを x32 と x64 の両方で強制的に実行しようとしましたが、同じ結果が得られました。