Почему я получаю "Никакой процесс не связан с этим объектом". при вызове process.Close() или process.Kill()?
У меня есть программа на 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, они волшебным образом появились снова. Также теперь есть несколько экземпляров "tshark" и "dumpcap", которые появляются, когда я вызываю GetProcesses(), но отсутствуют в списке процессов, которые показывает диспетчер задач.
Что мне здесь не хватает?? Если не считать перезагрузки компьютера, как мне заставить эти процессы завершиться? Это просто проблема проволочной акулы или общая проблема с процессами убийства?
1 ответ
Вы используете WinPcap или Npcap? Если вы используете WinPcap, вы можете попробовать переключиться на Npcap и использовать его вместо этого. См. Комментарий #32 Джеральда Комба о недавно закрытой ошибке Wireshark 14701.
Кстати, если вы не знали,tshark
способен захватывать одновременно несколько интерфейсов, поэтому теоретически требуется только один экземпляр. Я понимаю, что иногда это может вызвать проблемы с повторной сборкой, поэтому, если вы пытаетесь избежать этого или просто хотите, чтобы пакеты разделялись интерфейсом, то да, вам придется запускать несколько экземпляров.