Jak mogę uruchomić mój program automatycznie, jeśli ulegnie awarii na serwerze Windows 2003? Czasami mój program po prostu zawiesza się, czy jest jakiś sposób w oknach lub ustawieniach, które mogę ustawić?Jak automatycznie uruchomić ponownie program, jeśli ulegnie awarii w systemie Windows?
Odpowiedz
Zwykle stosuje się proces zwany procesem opiekuna. Jest to oddzielny proces, często usługa, która monitoruje stan głównego procesu. Kiedy opiekun wykryje, że główna usługa umarła, ponownie ją odradza.
Zgodnie z moją najlepszą wiedzą, nie ma wbudowanej funkcjonalności systemu Windows, aby zrobić to za Ciebie.
Wbudowana funkcja usług, karta Odzyskiwanie. –
Wyobrażałem sobie raczej, że użycie słowa "program" oznacza, że pytanie dotyczyło programu komputerowego. –
Nie, usługa jest prawdziwym krwawym exe. Tylko kilka konwencji, aby utrzymać kontrolę nad użytkownikiem. –
Niestety, w systemie Windows nie ma żadnych ustawień, aby automatycznie ponownie uruchomić zwykły program po awarii.
Czy potrzebujesz aktywnie współpracować z GUI aplikacji? Niektóre z Service Wrappers (przeznaczone do uruchamiania dowolnej aplikacji jako usługi systemu Windows) będą monitorować twoją aplikację i ponownie ją uruchomić, gdy się nie powiedzie, ale upewnij się, że zbadałeś Session 0 Isolation, aby się upewnić, że nie przeszkadza.
Możesz użyć specjalnej aplikacji, takiej jak BDV SystemEvents lub dowolnej innej. Pozwala określić aplikację, która zostanie uruchomiona, jeśli inna aplikacja zostanie zamknięta. Określ tę samą aplikację jako warunek i działanie, a uzyskasz oczekiwane wyniki.
Uwaga: przydatne mogą być pliki z samoplączącymi się nietoperzami, ale jeśli nie wiesz, co robisz, mogą siać spustoszenie. Dotyczy to zwłaszcza uruchamiania ich przy starcie. Zostałeś ostrzeżony.
W każdym razie. Właśnie przypomniałem sobie coś z moich 286 dni, kiedy dużo grałem z plikami BAT. Jeśli piszesz plik
yourprogram.exe
some other event
plik BAT będzie działać yourprogram, a następnie zatrzymać się i czekać w tle aż do wyjścia programu. Następnie uruchomi "inne wydarzenie". To było dość irytujące, jeśli chciałeś uruchomić wiele rzeczy naraz, ale tutaj jest to naprawdę przydatne. Dzięki temu można uruchomić pętlę, która uruchamia ponownie program (i ponownie uruchamia plik bat) zaraz po jego zakończeniu. Połącz to z https://superuser.com/questions/62525/run-a-completly-hidden-batch-file, a nigdy nie zobaczysz, że to się dzieje.
Ostateczny plik BAT ("restart.bat" w tym przykładzie) będzie wyglądać następująco:
c:\[location]\yourprogram.exe
wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat"
to wszystko. Uruchom program (przy uruchamianiu za pomocą zadania lub nawet po prostu folder startowy) za pomocą linii 2, a to powinno rozwiązać Twój problem :)
Och, jeśli chcesz zatrzymać pętlę, zmień nazwę pliku nietoperza lub umieść "//"przed dwiema liniami, zapisz ją i wyjdź z programu.
Jeśli program jest uruchomiony wymaga praw administratora, rozwiązanie znalazłem używał psexec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx), aby uruchomić program jak kij z podwyższonymi uprawnieniami. W takim przypadku BAT będzie wyglądać następująco:
c:\[location]\psexec -h c:\[location]\yourprogram.exe
c:\[location]\psexec -h wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat"
Następnie uruchom jako administrator bat lub uruchomić drugą linię (bez PsExec części) z harmonogramu zadań z podwyższonymi uprawnieniami.UWAGA: uruchomienie go jako zwykłego użytkownika i kliknięcie "nie" na monitorze UAC dało mi BSOD, prawdopodobnie dlatego, że zapętlono "nie można uruchomić programu z powodu braku przywilejów" kilka miliardów razy lub coś :)
Ładna koncepcja. Można nawet uniknąć plik wsadowy i invisible.vbs, i zrobić to w jednym VBScript zamiast np: „Trzymać z kalkulatora otwarty Set objShell = WScript.CreateObject («Wscript.Shell») ObjShell.run«calc.exe» 1, true ObjShell.run (Wscript.ScriptFullName) – Jimadine
Szukałem czegoś podobnego. Są dwie możliwości, aby sobie z tym poradzić - możesz napisać mały skrypt sam lub użyć czegoś, co już istnieje.
Po pewnym googling natknąłem ten miły list. Blogger skompilował około 8 narzędzi, aby automatycznie ponownie uruchomić awaryjną lub zamkniętą aplikację.
Można użyć RegisterApplicationRestart.
„Jeśli zarejestrujesz się na restart i aplikacja napotka nieobsługiwany wyjątek lub nie reaguje, użytkownik jest oferowana możliwość ponownego uruchomienia aplikacji, aplikacja nie jest automatycznie uruchomiony ponownie bez zgody użytkownika. "
Dla automatycznego restartu bez interwencji użytkownika, istnieje również RestartOnCrash. Działa ze wszystkimi wersjami systemu Windows.
Jakim programem? Usługa Windows lub zwykła aplikacja? –
Hmm, "czasami mój program się po prostu zawiesza". Wydaje się, że lepszym rozwiązaniem byłoby ustalenie, dlaczego program się zawiesił i naprawił. Band-aids są świetne, ponieważ ciało jest samoleczące. Nie tak z twoimi programami. –
Oczywiście chcesz, aby twój program się zawiesił. To świetny ideał, do którego warto dążyć. Ale nawet najsolidniejsze programy mogą czasami ulegać awariom. Jeśli znajdujesz się w środowisku serwera, może być sensownie uruchomić ponownie po wystąpieniu awarii. Nadal możesz rejestrować awarie i próbować je wyeliminować, ale Twoi użytkownicy będą dużo bardziej zadowoleni, bez długich przestojów podczas każdej awarii. – aggieNick02