如何通过它的位置终止流程? C#

时间:2017-03-08 10:33:03

标签: c#

我确定这很容易,但我已经疯狂地搜索了一段时间,并且无法理解这一点。

我已在列表框中列出了我要删除的所有进程,显示了该位置,因为您可以从不同位置运行此实例,我希望用户成为能够选择该列表框中的任何进程并将其终止。

因为进程名称相同但我希望它根据位置杀死它。

我在列表框中填充它的代码是这样的:

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())

非常感谢,

1 个答案:

答案 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();