Альтернативные методы, чтобы убить запущенный процесс в C # - PullRequest
2 голосов
/ 17 июля 2011

У меня возникли небольшие проблемы при попытке завершить процесс, я понимаю, что только на этом сайте достаточно ресурсов, но мне было интересно, есть ли альтернативные способы завершения приложения, а не что-то типичное, такое как:

    Process[] procs = Process.GetProcessesByName("test.exe");
    foreach (Process proc in procs)
        proc.Kill(); 

Ответы [ 4 ]

2 голосов
/ 17 июля 2011

Есть Process.CloseMainWindow , который приятно запрашивает выход из процесса (в отличие от Process.Kill , который сбивает процесс и может иметь отрицательные побочные эффекты).

1 голос
/ 17 июля 2011

В C # есть только 2 способа закрыть Process (AFAIK), используя Process.Kill () и Process.CloseMainWindow (), Kill отправляет немедленный сигнал KILL приложению и заставляет его немедленно закрыться.CloseMainWindow использует SendWindowMessage для отправки сигнала CLOSE в основное приложение.Убийство может быть небезопасным, потому что оно немедленно останавливает процесс.За CloseMainWindow может следовать Process.WaitForExit, чтобы вы могли быть уверены, что приложение закрыто и может продолжать выполнять работу, зная, что процесс, который вы сказали закрыть, завершился правильно.Как написано в комментарии Хайнци, пожалуйста, будьте немного конкретнее, я просто пытаюсь рассказать о том, что было сказано в надежде, что это то, что вам нужно.

0 голосов
/ 22 апреля 2015

Очень просто, просто нужно получить имя процесса и убить его, не пытайтесь делать что-то необычное, иногда меньше - больше ...

Process[] prs = Process.GetProcesses();


foreach (Process pr in prs)
{
if (pr.ProcessName == "test")
{

pr.Kill();

}

}
0 голосов
/ 17 июля 2011

Эта идея не хороша.Может быть другой запущенный процесс (ы) с таким именем.Хотите ли вы, чтобы какой-либо процесс с таким именем был прерван?Если вы не пишете приложение типа Диспетчер задач / Process Explorer, вы никогда не должны этого делать.И даже с типом приложения TM вы закрываете процесс, захватывая его дескриптор / объект процесса, а не по имени.

Вы не можете попросить целевой процесс изящно закрыть себя?Может быть, вы можете использовать именованный мьютекс, целевой поток будет ждать этого мьютекса.Когда вы сообщаете об этом named-mutex из другого процесса, целевой поток будет знать, что пришло время выйти и в конечном итоге выйти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...