【发布时间】: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