我确定这很容易,但我已经疯狂地搜索了一段时间,并且无法理解这一点。
我已在列表框中列出了我要删除的所有进程,显示了该位置,因为您可以从不同位置运行此实例,我希望用户成为能够选择该列表框中的任何进程并将其终止。
因为进程名称相同但我希望它根据位置杀死它。
我在列表框中填充它的代码是这样的:
public void getProcess()
{
Process[] localByName = Process.GetProcessesByName("lmgrd");
foreach (Process proc in localByName)
{
lb_instances.Items.Add(proc.MainModule.FileName);
}
}
输出如下:
C:\ folder1中\ lmgrd.exe的
C:\ folder2 \ lmgrd.exe
C:\ folder3 \ lmgrd.exe的
我想要一些
的内容Process.Kill(lb_list.SelectedItem.TosString())
非常感谢,
答案 0 :(得分:2)
每个进程都由一个数字唯一标识,你应该存储它。自从我做了Windows开发以来已经有一段时间,但你可以做这样的事情。让我们创建一个类来存储我们的数据:
public class ProcessInfo
{
public int ProcessId { get; set; }
public string Name { get; set; }
}
现在我们以新格式获取流程列表:
var processes = Process.GetProcessesByName("lmgrd")
.Select(p => new ProcessInfo
{
ProcessId = p.Id,
Name = p.MainModule.FileName
});
我们需要设置ListBox
以使用新类的正确属性:
lb_instances.ValueMember = "ProcessId";
lb_instances.DisplayMember = "Name";
将我们的流程一次性添加到ListBox
(无需在此处循环):
lb_instances.Items.AddRange(processes );
现在,当您想要选择一个流程时,请执行以下操作:
var processId = (int)lb_instances.SelectedValue;
Process.GetProcessById(processId).Kill();