2012-05-13 15 views
0

WMIクエリを使用してすべてのプロセスのリストを取得していますが、欠落しているのはプロセスの説明です。 「説明」プロパティを使用すると、このように表示されます。WMIを使用してプロセス記述を取得する方法は?

Name : chrome.exe   Description : chrome.exe 

が、それは

Name : chrome.exe   Description : Google Chrome 

する必要がありますので、プロセス記述を返すプロパティの名前は何ですか?

public void GetProcesses() 
{ 
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process"); 
    ManagementObjectCollection processList = searcher.Get(); 
    foreach (ManagementObject obj in processList) 
    { 
     Console.WriteLine("Name : {0}  Description : {1}",obj["Name"],obj["Description"]); 
    } 
} 

答えて

0

これはWMIではありませんが、ローカルマシンのプロセスで動作します。

プロセス[sic。]の説明がありますが、実際には実行可能ファイルの説明はGetVersionInfoです。 FileDescriptionおよびProductName propertiesを確認してください。

ただし、この情報が利用可能であるという保証はありません。それにもかかわらず、おそらくあなたの最善の策です。 sysinternalsプロセスエクスプローラのような他のツールも同様にその情報を表示します。

+0

まあ、私はWCFを使っていますが、クライアントはループ内で[ID、Name、Desc、WorkingSet]プロセスをホストPCから取得します。ループ内で新しいGetVersionInfoを宣言するといいでしょうか? –

+0

プロセス/実行ファイルごとに呼び出す必要があります。値は変更されません。つまり、WorkSetの更新された値を確実に返す必要がある間に、バージョン情報をキャッシュする必要はありません。それが本当に問題の価値があるかどうかは、たびにそれを呼び出すのと比べて、少し難しいです。いくつかの測定を行う必要があります。もちろん、クライアントがサーバーを呼び出す頻度に依存します(実行可能ファイルごとにGetVersionInfoを呼び出します)。 –

+0

私は方法を考え出しました。新しいプロセスが開始されたか閉じられたかだけを更新します。 –

0

Win32_Process class documentationにはすべてのプロパティがあります。あなたが運が良ければ、wbemtestを使用して私のマシン上のいくつかのプロセスをテストするように見えますが、私はあなたに必要なプロパティを見ません。プロセスがそのような情報を公開しない可能性があります。

+0

実際にWMIを使用する前に、私は 'System 'を使って説明を得ることができました。 Diagnostics'を実行し、Windowsのタスクマネージャーにも説明が表示されます。 –

+0

プロセスがローカルの場合、Christian.Kの提案があります。私はWMIのために地元で話していないと仮定していました。ローカルプロセスの場合、System.Diagnostics.Processを使用する方がはるかに理にかなっています。http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx –

+0

私はクライアント/サーバーアプリケーションで、 System.Diagnostics.Process'の方が速いかもしれませんが、プロセス全体が返ってくるわけではなく、管理者として実行してほとんどのものを取得する必要があります。また、あなたのアプリケーションが2つのバージョン(x86、x64 )私はWMIを使用することを好むので。残念ながら、いつも何かが見逃されています。 –

関連する問題