2016-05-25 20 views
0

マシンの特定のセキュリティ設定をチェックする軽量アプリケーションを作成しようとしています。現在、私は現在の暗号化の状態を除いてすべてを持っています。しかし、私は以下のエラーが発生しています:foreach文を現在の定義に追加するにはどうすればよいですか?

"foreach文は、 'ComplianceGuide.ManagementObjectCollection'タイプの変数では動作できません。 「ComplianceGuide.ManagementObjectCollectionは、」私は定義を追加するために行くん

「GetEnumeratorメソッド」の公開定義が含まれていません?C#は時々とても混乱しています。ビデオチュートリアルは素晴らしいだろう。

enter image description here

public class MyWMIQuery 
{ 

    public static void Main() 
    { 

     try 
     { 
      ManagementObjectSearcher searcher = 
       new ManagementObjectSearcher("root\\CIMV2\\Security\\MicrosoftVolumeEncryption", 
       "SELECT * FROM Win32_EncryptableVolume"); 

      foreach (System.Management.ManagementObject queryObj in searcher.Get()) 
      { 
       Console.WriteLine("-----------------------------------"); 
       Console.WriteLine("Win32_EncryptableVolume instance"); 
       Console.WriteLine("-----------------------------------"); 
       Console.WriteLine("ProtectionStatus: {0}", queryObj["ProtectionStatus"]); 
      } 
     } 
     catch (ManagementException e) 
     { 
      MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); 
     } 
    } 
} 
+1

「定義を追加する場所はどこですか?」それをクラスに直接追加するか、 'IEnumerable'または' IEnumerable 'を実装してクラスに追加します。 –

+0

「ビデオチュートリアルはすばらしいですね」 - [他の人もそうだと思う](https://www.google.com/search?q=c%23+video+tutorials) –

+0

@DStanley JoeがIEnumerableを既に実装している標準クラス(https://msdn.microsoft.com/en-us/library/system.management.managementobjectcollection(v=vs.110).aspx)。 –

答えて

1

あなたが開いたファイルが、ManagementObjectCollection.csというスクリーンショットに表示されます。

何らかの理由で、そのクラスの名前空間定義がフレームワーク提供クラスの正確な名前空間定義と一致し、そのファイル内にあるものがGetEnumeratorを実装していないと推測します。新しいプロジェクトのそのコードと適切な参照は、そのエラーを表示しません。

フレームワークで提供されるクラスを使用する場合は、System.Management.dllにadd a referenceが必要です。ファイルでクラスを使用する場合は、少なくとも名前空間を変更してください。

+0

私はNameSpaceをしばらく前に変更しました。正直なところ、あなたにその理由を伝えられませんでした。しかし、System.Management名前空間に切り替えようとすると、かなりの量のエラーが発生します。 –

+0

foreach定義のIEnumeratorへの参照を現在のNameSpaceに追加するにはどうすればよいですか?私はこのプロジェクトでやる必要がある機能の最後の部分であることをお勧めします。 –

+0

_your_ class - _referenceの 'System.Management'ライブラリの名前空間を変更しないでください。あなたがやったはずのものではないライブラリのソースコードをコピーしたようです。 –

関連する問題