Projektuję usługę systemu Windows, która obsługuje listę procesów. Może uruchamiać na nich zadania. Na przykład - zatrzymaj konkretny proces (na liście), uruchom ponownie określony proces, uruchom nowy proces i dodaj go do listy, itp.Projektowanie monitora procesu Usługa systemu Windows
Ta usługa systemu Windows jest kontrolowana przez aplikację internetową za pośrednictwem usługi WCF - Usługa systemu Windows uruchamia usługę WCF, a aplikacja internetowa łączy się z tą usługą WCF. Metody eksportu usług WCF, takie jak Restart(int id)
i Stop(int id)
.
Mam kilka pytań:
Gdy proces nieoczekiwanie zamyka (na przykład z powodu błędu wewnętrznego), usługa powinna zaktualizować wartość w jakiejś bazie danych. Teraz, aby to zrobić, mam tylko wątek, który co 30 sekund sprawdza, czy proces jest uruchomiony, czy nie.
Czy to prawo to robić? Czy powinienem użyć zdarzenia
Exit
?Gdy usługa zamyka, na dowolnym powodu wszystkich procesów, że utrzymuje zamyka też. Jaki jest właściwy sposób na zrobienie tego?
Zastanawiałem się nad samą pętlą na liście i zabij wszystkie procesy, gdy wywoływana jest usługa
OnClose()
. Problem polega na tym, że zdarzenieOnClose()
nie zawsze jest wywoływane. Na przykład, co jeśli usługa nieoczekiwanie się zamknie? Nie zadzwoni pod numerOnClose()
.Jak powinienem reprezentować każde zadanie (na przykład - zrestartować proces lub zatrzymać proces)?
W tej chwili używam
System.Threading.Tasks
. Czy to właściwa droga?
Usługa ta powinna być wysoce skalowalna, przy minimalnych błędach.
Dzięki.
brzmi to tak, jakby ponownie wymyślić Menedżera kontroli usług systemu Windows? –
Problem z SCM polega na tym, że nie można go rozszerzyć. W mojej usłudze mam również niestandardowe metody, nie tylko "restart" i "stop". –
Następnie wystarczy napisać niestandardową aplikację. aby wysłać te wiadomości do hostowanego procesu SCM. Usługi Windows obsługują ten model. –