Skocz do zawartości
kiedy_oni_placza

Detekcja, jeżeli process zostanie zamknięty wstaje na nowo+wpisuje 3 linijki kodu

Rekomendowane odpowiedzi

Witam, mam pewien program na vmie, który niestety co jakiś czas crashuje, i potrzebuję go zrestartować.

Myślałem że najlepszym rozwiązaniem byłoby nauczenie napisania się takiej funkcji/znalezienie już istniejącej by po wykruciu brakującego procesu, uruchomił go na nowo

wpisał 3 linijki kodu w odstępach 10 sekund i tak w kółko, niestety nie wiem jak się za to zabrać ktoś nakieruje co w ogóle powinienem googlować?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A zewnętrzny proces nadzorujący typu supervisor?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Podstawowe pytanie - Windows czy Linux?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To windows 10, supervisor z tego co widzę jest na linuxa, a ja nie mam opcji zmiany zbytnio bo na linuxie w ogóle nie opdali(wymaga net frameworka), i już się namęczyłem z kamuflażem VM'a w rejestrze konfigach itp

Program napisany w frameworku po prostu co jakieś 2h crashuje i ciągle muszę ręcznie go ponownie odpalać, odpalenie to po prostu jak pisałem w pierwszym poście

1 odpalenie procesu, 2 wpisanie 3 linijek w odstępie czasowym jakimś 10 s (login,pass,komenda) i to tyle dalej już wszystko ma zautomatyzowane.

Edytowane przez kiedy_oni_placza

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No to łatwizna, tylko dla ścisłości:

  • Czy ten program napisany .NET ma kontrolować jakiś inny zewnętrzny proces, czy chcesz napisać program który odpali ten .NET, i go będzie kontrolował?
  • Gdzie ma wpisywać te linijki? Do pliku? (log ??), jako argumenty podczas uruchamiania procesu?, do kontrolki w programie?

Edytowane przez Matt91111

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A nie prościej zdebugować ten program skoro go w ten czy inny sposób napisałeś?

A przynajmniej zmodyfikować, tak żeby jako argumenty przyjmował login, hasło i komendę, bo rozumiem, że teraz czeka na wpisanie (według mnie trudne do wstrzyknięcia przez inny program).

 

Problem restartu można różnie rozwiązać:

-być może przy użyciu harmonogramu Windows o ile da się znaleźć właściwego triggera

-tak jak piszesz przy pomocy innego programu, który okresowo sprawdza czy ten właściwy jest uruchomiony

-napisać prostego bat-a, który w nieskończonej pętli uruchamia docelowy program (odpala się, skrypt w tym momencie czeka na jego zakończenie, jak się wywali to pętla przechodzi do kolejnej iteracji i znowu uruchamia program)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie napisałem tego programu, crash log https://pastebin.com/wcs5ptDs

Ten program działa właśnie w konsoli CMD, kontroluje myszkę/klawiaturę dlatego jest na vmie zresztą.

Te kody/linijki wpisuje w tej konsoli login->hasło->start i tyle, nie muszę nic poza tym zrobić byleby wykrył jeżeli (aplikacja.exe) jest nieaktywna uruchomić ponownie, złapać focus na tej apce i wklepać te 3 linijki i tyle.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

z crash logu wynika, że ma problem z jakimś działaniem asynchronicznym/operacją na kilku wątkach.

 

Tu masz na szybko, potrzebujesz zainstalować do tego autoit oraz wyciągnąć nazwę okna.

 

#NoTrayIcon
#include <Process.au3>
HotKeySet("{ESC}", "quit")

global const $iIsAliveTick = 5000 ;5sekund
global const $sAppPath = "sciezka/do/aplikacja.exe"
global const $sAppTitle = "nazwa okna";autoit window info -> [summary] -> window -> title

global $hWindow = null
global $iPID = null

Init()

while true
CheckApp()
sleep($iIsAliveTick)
wend

Func Init()
if not FileExists($sAppPath) then
	MsgBox(0, "", "ni eznaleziono aplikacji")
	exit 0
endif
EndFunc

Func StartApp()
$iPID = Run($sAppPath, "", @SW_SHOW)
EndFunc

Func SetupApp()
local $handle = WinGetHandle("[TITLE:"&$sAppTitle&"]")

if @error then
	MsgBox(0, '', "nie udalo sie znalezc okna")
endif

WinActivate($handle);ustawia focus

Send("Co kolwiek chcemy wyslac", 1)
Sleep(1000)
Send("{ENTER}")
Sleep(1000)
Send("Oraz wiecej tego co checmy wyslac", 1)
Sleep(1000)
;
; {...}
;
EndFunc

Func CheckApp()
dim $name = _ProcessGetName($iPID)

if @error then
	StartApp()
	Sleep(2000)
	SetupApp()
endif
EndFunc

Func Quit()
exit 0
EndFunc

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki wielkie kolego, wrócę później to dam znać

#wszystko działa sprawnie, zedytowałem co trzeba było i wszystko gra automatycznie już ;)

Edytowane przez kiedy_oni_placza

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...