0

WMI クエリの応答をファイルに書き込めませんが、コンソールに出力できます。

さまざまな WMI メソッドを使用してデータを取得するようにクエリを書き直しました。使いやすい下記の方法に戻しました。

応答が書き込み可能な文字列でない場合に備えて、からmo["PackageName"]に変更しました。mo["PackageName"].ToString()

私はグーグルで検索しました - 私はまだ同様の問題を見つけていません.

//store log in same directory as exe is ran from
StreamWriter writeFile = new StreamWriter(filepath);    
ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT PackageName FROM Win32_Product WHERE PackageName LIKE 'jre%%'");
foreach (ManagementObject mo in mos.Get())
{
   if (mo["PackageName"].ToString().Contains("jre"))
   {
      String packageName = mo["PackageName"].ToString();
      writeFile.WriteLine(host + "," + packageName);
   }
}

更新 は以下の私の答えを参照してください:

foreach (ManagementObject mo in mos.Get())
        {
            if (mo["PackageName"].ToString().Contains("jre"))
            {
                String packageName = mo["PackageName"].ToString();
                writeFile.WriteLine(host + "," + packageName);
                writeFile.Flush();
            }
        }
4

3 に答える 3

1

writeFileがどのように定義されているのかわからない場合は、次のように、より簡単なSystem.IO.Fileクラスを使用することをお勧めします。

File.AppendAllText(pathToYourFile, host + "," + packageName);

これにより、ファイルが自動的に開かれ、書き込まれ、閉じられます。

于 2013-05-20T19:12:25.887 に答える
0

WMI クエリ コードの作成にはWMI Code Creatorを使用しています。
C# コードを作成し、クエリをテストすることができます。

本当の答えではありませんが、役立つかもしれません。

于 2013-05-20T19:13:58.317 に答える
0

書き込み後にライターをフラッシュするのを忘れました。

String packageName = mo["PackageName"].ToString();
writeFile.WriteLine(host + "," + packageName);
writeFile.Flush();
于 2013-05-20T19:14:39.693 に答える