Mam aplikację A, którą chciałbym móc wywołać dowolne inne procesy określone przez użytkownika w pliku konfiguracyjnym.Uruchamiaj dowolne podprocesy w systemie Windows i nadal kończ czystość?
Skrypt wsadowy B jest jednym z takich procesów, w których użytkownik chciałby zostać wywołany przez A. B ustawia niektóre zmienne środowiskowe, pokazuje niektóre komunikaty i wywołuje kompilator C, aby wykonać pewną pracę.
Does Okna zapewniają standardowy sposób dla dowolnych procesów zostać rozwiązana czysto? Załóżmy, że A jest uruchamiane w konsoli i otrzymuje CTRL + C. Czy może przekazać to B i C? Załóżmy, że A działa w oknie i użytkownik próbuje zamknąć okno, czy może anulować B i C?
TerminateProcess jest opcją, ale niezbyt dobrą. Jeśli A używa TerminateProcess na B, C nadal działa. Może to powodować nieprzyjemne problemy, jeśli C jest długotrwałe, ponieważ możemy uruchomić kolejną instancję C, aby działać na tych samych plikach, podczas gdy pierwsza instancja C jest nadal potajemnie w działaniu. Ponadto, TerminateProcess nie daje czystego wyjścia.
GenerateConsoleCtrlEvent brzmi nieźle i może działać, gdy wszystko działa w konsoli, ale dokumentacja mówi, że można wysłać tylko CTRL + C do swojej konsoli, a więc nie pomoże, gdyby A działało w oknie.
Czy istnieje odpowiednik SIGINT w systemie Windows? Chciałbym znaleźć taki artykuł: http://www.cons.org/cracauer/sigint.html dla systemu Windows.
+1 za dobre pytanie. Zabawne nie było odpowiedzi ... Nie jestem świadomy mechanizmu podobnego do sygnału w Win32. Kiedy musiałem powiadamiać procesy potomne, wysłałem wiadomość WM_CLOSE do aplikacji GUI. Dla aplikacji konsolowych utworzyłem je, dołączając strumienie wejściowe i wyjściowe do głównej aplikacji i kiedy chciałem je zakończyć, właśnie zamknąłem strumień wejściowy. Jeśli chodzi o dzieci dzieci itp., Polegałem na moich bezpośrednich dzieciach, aby oczyścić ich zależności :). –