我正在制作一个应该列出流程的程序,当我点击某个流程时,它应该给我描述。
我的想法(实际上我修改了类似于我在网上找到的东西)是使用带有sql语句的ManagementObjectSearcher(“Select * From Win32_Process WHERE ProcessID =”+ a);其中“a”是包含进程ID的字符串变量。对于某些进程,它的工作(例如chrome,计算器)和某些进程没有(svchost,tiltweelmouse等)。
private void Lista_procesa_prikaz_MouseClick(object sender, MouseEventArgs e)
{
string a = Lista_procesa_prikaz.Items[Lista_procesa_prikaz.FocusedItem.Index].SubItems[1].Text;
var searcher = new ManagementObjectSearcher("Select * From Win32_Process WHERE ProcessID="+a);
var proces = searcher.Get();
foreach (var process in proces)
{
var processName = process["Name"];
var processPath = process["ExecutablePath"];
if (processPath != null)
{
var fileVersionInfo = FileVersionInfo.GetVersionInfo(processPath.ToString());
var processDescription = fileVersionInfo.FileDescription;
Description_textbox.Text = processDescription.ToString();
}
}
}
如果有人在这里发现错误,我会非常高兴, 任何帮助表示赞赏
谢谢
编辑:部分解决的问题,如果有人关心,平台需要设置为x64(在我的情况下)。转到项目, yourProjectName 属性,构建,平台目标:x64
答案 0 :(得分:0)
我不知道它是否必须来自ManagementObjectSearcher
,但我可以建议获取相同数据的托管类。
var procs = System.Diagnostics.Process.GetProcesses()
.Where(x => x.Id == 3116);
foreach(var p in procs)
Console.WriteLine(p.ProcessName + p.Id);
如果您没有提升权限,则尝试阅读使用这两种方法的路径。至于获得这些权限,请考虑using a manifest。