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ę.

  • Tematy

  • Odpowiedzi

    • Wiem co czujesz 🙂.Ja przy nim prawie pada z kompa wyrwałem.A ile było Pi.....e nie gram to nie zliczysz 😄.Ale najważniejsze że się udało.I masz satysfakcję bo to jeden z najtrudniejszych soulsowych bossow https://ebd.cda.pl/620x368/15092229f8 Patrz to
    • Więc wytłumacz mi jakim cudem bez mierzenia wystarczy odpalić gówno kalibrator HDR WINDOWS i zobaczyć w jakim trybie pokazuje detal na 1000 nit, a w jakim na 570. Potem to samo zrobić w dowolnej grze z kalibracja HDR. I w każdym innym ustawieniu niż HDR + APL HIGH, ustawienie gry na 1080 nit prześwietla obraz. Więc w swoim ustawieniu masz niby 1000 nit z uciętymi w opór detalami. Faktycznie, genialna sprawa A jak ustawisz detale na 570 to on nie ma prawa zaświecić 1000 bo właśnie to ograniczyłeś w ustawieniach.  Ale żeby nie było, zjem i odpalę grę I będę srogo zdziwiony jak nie ujrze przepalonych jasności. 
    • Przy każdej zmianie traci się na tym, że kupuje się nową kartę, a sprzedaje używaną, dlatego częste zmiany są niekorzystne finansowo, chyba że się zmienia używaną na używaną.
    • Intel kompletnie tutaj nie ma sensu raz że to do gier, a dwa że jeszcze do 1440p. Powinieneś skupić się na wydajności GPU i bić po RTX 4070 Ti Super - tutaj możesz trzymać się RTX ale CPU spokojnie brałbym 7500F bo to będzie idealne najlepsze połączenie. Za 7100 zł masz właśnie taki zestaw https://proline.pl/koszyk/2878bd11 a celując w maksa to przy dopłacie za 7500 zł z 7900 XTX https://proline.pl/koszyk/316e8335 
    • 14700F nigdy bym nie brał bo to totalny crap. Dostaniesz zawyżone napięcie, to ten CPU będzie siorbał niesamowicie dużo papu i nic z tym nie zrobisz. Do tego kompletnie nic nie wiesz jakie podzespoły otrzymasz. Druga sprawa, połączenie i7 + RTX 4070S jest dalekie od opłacalnej wydajności w zestawie do gier. Za 9200 zł na gotowo masz https://proline.pl/koszyk/35ad9d7d z Ryzen 7 7700 i RTX 4080 Super albo możesz dać i https://proline.pl/koszyk/8f26d0eb 7800X3D + RX 7900 XTX Office w jakiej wersji? 
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...