Jestem bardzo nowy w języku C#, więc moje pytanie może zabrzmieć głupio. Zajmuję się tworzeniem aplikacji, która czasami wymaga uruchomienia ffmpeg. Jak zgadujesz, ten proces ffmpeg musi zostać zabity, gdy zamknięta jest aplikacja hosta. Używam takiego kodu dla tego zadania:C#: proces zamykania procesu "zabijanie procesu" (z zadaniem)
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit);
private void OnProcessExit(object sender, EventArgs e)
{
proc.Kill();
}
Działa to dobrze, gdy aplikacja jest prawidłowo zamknięta (przez to interfejs lub TaskMan - Aplikacje). Problem polega na tym, że zdarzenie OnProcessExit nie zostanie wywołane, jeśli proces programu został zabity (za pomocą Taskman - Processes). O ile mi wiadomo, proces zabijania i zamykania akcji programu nie jest taki sam na niskim poziomie, ale myślę, że proces zabijania jest poleceniem i może być obsługiwany za pomocą narzędzi C#. Czy możliwe jest zamknięcie procesu potomnego w tym przypadku?
[Pytanie] (http://stackoverflow.com/questions/3342941/kill-child-process-when-parent-process-is-killed?rq=1) mówi o zabijanie procesy podrzędne, gdy ich rodzic jest zabity. –
Dzięki, Scott Miller, [this] [1] metoda jest wszystko, czego potrzebuję, aby rozwiązać mój problem. [1]: http://stackoverflow.com/questions/3342941/kill-child-process-when-parent-process-is-killed?rq=1 – JustLogin
Nie, to zły pomysł. Próba zrobienia czegoś rozsądnego, gdy użytkownik robi coś nierozsądnego, to po prostu zmarnowany wysiłek. Nie masz pojęcia * dlaczego * użytkownik zdecydował się zabić twój program w ten sposób. Ale zazwyczaj zakładasz, że to nie dlatego, że twój program działa poprawnie. Szanse, że cokolwiek zamierzasz zrobić, by zabić ffmpeg, osiągną dobry cel, są odpowiednio szczupłe. Obiekty Job też nie są rozwiązaniem, bardzo źle się zepsuły w Vista. Teraz masz dwa problemy. –