2016-03-29 8 views
1

WMIでWindowsサービスの起動モードを取得しようとしています。 最初はすべて正常に動作しました。しかし、今私は常にSystem.Management.ManagementBaseObjectの一般的なエラーを取得しています。C#WMIサービス情報のクエリで汎用エラーが発生する

私のコードは次のようになります。

 string wmiQuery = String.Format("Select StartMode from Win32_Service where Name= '{0}'", serviceName); 
    try 
    { 
     ManagementObjectSearcher wmi = new ManagementObjectSearcher(wmiQuery); 

     ManagementObjectCollection coll = wmi.Get(); 

     foreach (var service in coll) // throws the Exception!!!! 
     { 

     } 
    } 
    catch (Exception ex) 
    { 

    } 

スタックトレース:

System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatusのerrorCode) System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()

答えて

0

MoveNextの例外は同期の問題のように聞こえます。 コレクションのシンクルートをロックするとどうなりますか:

  lock (coll.SyncRoot) 
      { 
       foreach (var service in coll) 
       { 
        //do your stuff 
       } 
      } 
関連する問題