为什么得到“没有进程与此对象相关联”。当调用process.Close()或process.Kill()时?

时间:2018-12-03 21:41:01

标签: process wireshark process.start tshark processstartinfo

我有一个C#程序,正在启动TShark.exe,它与WireShark在后台等效。我想关闭所有启动的实例。它似乎可以正常启动,在后台运行并按需将网络流量记录到文件中。但是,当我尝试关闭它时,出现了"No process is associated with this object."异常。

这是我开始流程的方式:

ProcessStartInfo processStartInfo = new ProcessStartInfo
{
   Arguments = $"-i {nic} -t ad -w {GenerateLogPath(nic)}",
   FileName = "\"C:\\Program Files\\Wireshark\\tshark.exe\"",
   CreateNoWindow = true,
   WindowStyle = ProcessWindowStyle.Hidden,
   UseShellExecute = false
};

WireSharkProcesses.Add(System.Diagnostics.Process.Start(processStartInfo));

我尝试了几种方法来关闭/杀死这些进程。首先,我保留了我在应用程序中启动的所有进程的列表,并对其进行了以下调用,但未成功:

process.CloseWindow();
process.Close();
process.Kill();

我不断收到"No process is associated with this object."异常。

所以,我用过:

var processes = System.Diagnostics.Process.GetProcesses();

并获得了我机器上所有进程的列表,并遍历了它们,并试图关闭那些进程名称为“ tshark”或“ dumpcap”的用户。我尝试使用.CloseWindow()、. Close()和.Kill()尝试全部失败,并抛出了上述异常。

我什至进入TaskManager并尝试结束对他们的任务。它们似乎已被删除,但是在关闭并重新打开TaskManager后,它们神奇地重新出现。现在,当我调用GetProcesses()时,还会出现“ tshark”和“ dumpcap”的多个实例,但不在任务管理器显示的进程列表中。

我在这里想念什么?在不重新启动计算机的情况下,如何使这些进程退出?这是只是一个Wireshark问题,还是杀死进程的普遍问题?

1 个答案:

答案 0 :(得分:1)

您使用的是WinPcap还是Npcap?如果您使用的是WinPcap,则可以尝试切换到Npcap并使用它。请参阅Gerald Comb对最近关闭的Wireshark Bug 14701的评论#32。

顺便说一句,如果您不知道,tshark能够一次捕获多个接口,因此理论上只需要一个实例。我知道这有时可能会导致重组问题,因此,如果您要避免这种情况,或者只是想使数据包按接口分开,那么是的,您将必须启动多个实例。