Witam,
Mam pewną aplikacje, którą w razie błędu wykonywania .exe, albo zawieszenia, ewentualnie utraty połączenia z serwerem chciałbym zresetować zewnętrznym programem, który działa w pętli w tle.
Obecnie problem ten zrealizowałem w ten sposób. Wczytałem DLL-ke do tej aplikacji, którą chce monitorować. Założony jest hook na funkcje recv(). Jeżeli moja DLL-ka wykryje, że ostatni pakiet został otrzymany dłużej niż minute temu to korzystając z exit() zamyka aplikacje.
poza tym w DLL mam pewne funkcje sterujące aplikacją, którą to także chce monitorować.
Oddzielny program w pętli poprzez FindWindow() zwraca po nazwie okna, że HWND == NULL, więc uruchamia ją ponownie wykorzystując ShellExecute(), następnie seria Sleep() w połączeniu z PostMessage() dla przesłania pewnych informacji do tej aplikacji i już śmiga.
Jednak zaczęło mi to nie wystarczać.
Chciałbym uruchomić takich aplikacji więcej niż jedną. Wykonanie tego poprzez nazwy okien jest niemożliwe, ponieważ już będzie więcej niż jedna takich samych nazw okien w systemie i moja aplikacja do resetowania zgłupieje.
Jak najlepiej/najprofesjonalniej rozwiązać ten problem?
Warunek:
- Między programem resetującym, a DLL-ką zachodzi możliwość dwustronnej wymiany informacji.
- Możliwość powielenia w/w wiązanki w systemie, bez kolizji.
Czyli jeżeli TCP/IP to chyba różne porty, losowane na początku, zapisywane do pliku i następnie wczytywane do bindu przez drugą aplikacje.
... a może do tego celu są jakieś specjalne narzędzia?