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

为什么我会得到;没有与此对象关联的进程。”;调用process.Close()或process.Kill()时?,process,wireshark,process.start,tshark,processstartinfo,Process,Wireshark,Process.start,Tshark,Processstartinfo,我有一个C#程序正在启动TShark.exe,它的背景相当于WireShark。我想关闭我启动的所有实例。它的启动似乎很好,在后台运行,并将网络流量记录到一个文件中。但是,当我试图关闭它时,我得到一个“没有进程与此对象关联。”异常 以下是我如何启动流程: ProcessStartInfo processStartInfo = new ProcessStartInfo { Arguments = $"-i {nic} -t ad -w {GenerateLogPath(nic)}",

我有一个C#程序正在启动TShark.exe,它的背景相当于WireShark。我想关闭我启动的所有实例。它的启动似乎很好,在后台运行,并将网络流量记录到一个文件中。但是,当我试图关闭它时,我得到一个
“没有进程与此对象关联。”
异常

以下是我如何启动流程:

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();
我不断得到
“没有进程与此对象关联。”
异常

所以,我用了:

var processes = System.Diagnostics.Process.GetProcesses();
并获得了我机器上所有进程的列表,并通过它们循环,试图关闭那些进程名为“tshark”或“dumpcap”的进程。我尝试使用.CloseWindow()、.Close()和.Kill()执行此操作,所有这些操作都失败并引发了上述异常

我甚至走进TaskManager,试图结束对他们的任务。它们似乎已被移除,但在关闭并重新打开TaskManager时,它们神奇地重新出现。现在还有几个“tshark”和“dumpcap”实例在我调用getprocesss()时显示,但不在Task Manager显示的进程列表中

我在这里错过了什么??除了重新启动我的机器,我如何让这些进程退出?这仅仅是wireshark问题,还是终止进程的一般问题?

您使用的是还是?如果您正在使用WinPcap,您可以尝试切换到Npcap并使用它。见杰拉尔德·科姆(Gerald Comb)对最近关闭的网站的评论


顺便说一句,如果您不知道,它一次可以在多个接口上捕获,因此理论上只需要一个实例。我知道这有时会导致重新组装问题,所以如果这是您试图避免的,或者您只是想通过接口将数据包分开,那么是的,您必须启动多个实例。

谢谢!!这非常有帮助。对于解决方案,我最终只使用了-a标志并将持续时间设置为100,这样它基本上比我试图捕获的任何进程都要长。所以我刚刚添加了:-一个duration:100作为命令行参数,它会在100秒后自动关闭。