ManagementObjectSearcher を使用した WMI クエリがあります。
通常、これは正常に機能しますが、一部のマシンでは、ハングしたり、まったく返されません。クエリにタイムアウトを設定しようとしましたが、違いはないようです。
これは私のコードです:
using (var query = new ManagementObjectSearcher("SELECT IDProcess, PercentProcessorTime, WorkingSet FROM Win32_PerfFormattedData_PerfProc_Process"))
{
try
{
query.Options.Timeout = new TimeSpan(0, 0, 10);
query.Options.ReturnImmediately = false;
Log.Info("Query built");
foreach (ManagementObject obj in query.Get())
{
using (obj)
{
var key = (uint)obj.GetPropertyValue("IDProcess");
Log.Info(key);
processStats[key] = new ulong[] { (ulong)obj.GetPropertyValue("PercentProcessorTime"), (ulong)obj.GetPropertyValue("WorkingSet") };
}
}
}
}
ログに「Query built」と表示された後、何も表示されず、プログラムが応答しなくなります。
手動タイムアウト設定の有無にかかわらず試しました。