【问题标题】:Why do I get "No process is associated with this object." when calling process.Close() or process.Kill()?为什么我得到“没有进程与此对象关联”。调用 process.Close() 或 process.Kill() 时?
【发布时间】:2018-12-03 21:41:00
【问题描述】:

我有一个启动 TShark.exe 的 C# 程序,它是 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 后,它们又神奇地重新出现了。现在还有几个“tshark”和“dumpcap”实例在我调用 GetProcesses() 时出现,但不在任务管理器显示的进程列表中。

我在这里错过了什么?没有重新启动我的机器,我如何让这些进程退出?这只是一个wireshark问题,还是杀死进程的一般问题?

【问题讨论】:

  • 对于解决方案,我最终只使用了 -a 标志并将持续时间设置为 100,因此它基本上运行的时间比我试图捕获的任何进程的持续时间要长。所以我只是添加了: -a duration:100 作为命令行参数,它会在 100 秒后自行关闭。

标签: process wireshark process.start tshark processstartinfo


【解决方案1】:

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

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

【讨论】:

  • 谢谢!!这很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 2021-03-29
相关资源
最近更新 更多