Почему я получаю "Никакой процесс не связан с этим объектом". при вызове 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 способен захватывать одновременно несколько интерфейсов, поэтому теоретически требуется только один экземпляр. Я понимаю, что иногда это может вызвать проблемы с повторной сборкой, поэтому, если вы пытаетесь избежать этого или просто хотите, чтобы пакеты разделялись интерфейсом, то да, вам придется запускать несколько экземпляров.

Другие вопросы по тегам