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

  • Popularne aktualnie

  • Tematy

  • Odpowiedzi

    • A podłączenie go pod płytę nie wchodzi w grę? puszczenie przewodu jakimś otworem z zasilacza i sterowanie obrotami z płyty wtedy byś miał dużo większe pole manewru inaczej to ze 140stek dobrać taki co startuje z niskiego napięcia i będzie cichy jest ciężko a musi startować nisko bo będziesz miał problem z jego obracaniem na 99%. Stare cichutkie Silent wings 2 startowały nisko, 120mm potrafił wystartować od 2.7v a 140 od 3.7 - 4v co jak na 140stkę jest bdb wynikiem, przykładowo taki arctic F12 w wersji 120 startuje poniżej 3v a wersja f14 już potrzebuje 6v  
    • No szybko, szybko, chyba niezły crunch. Dziś 4 hotfix wyszedł.     Widać te poprawki dużo dały z oceny "mieszanych" już jest 70% pozytywów.
    • @*** ChOpLaCz ***Niestety Horizon Forbidden West jest grą, która przeszła bez echa i na konsolach i, szczególnie, na PC. Nie rozumiem marketingu (jego braku) w przypadku PC-towych portów robionych przez Sony.
    • Jak masz gx'a 750 do wyrwania w takiej kasie to nie ma co się zastanawiać bdb i cichy zasilacz tylko najlepiej sobie wyłącz hybrid mode czyli wciśnij ten przełącznik z tyłu niech wentylator się kręci cały czas bo one mają często problem z lekkim terkotaniem jak tryb pół pasywny jest włączony, jak go wyłączysz to bez obciążenia kręci okoli 400rpm więc i tak jest niesłyszalny + pod obciążeniem jak "flaki" będą na bieżąco chłodzone osiągnie niższe obroty  
    • Nie wiem szczerze jakie są Alienware teraz, ale od kilku lat stawiam na ASUSa ROG lub TUF i nie zawiodłem się. Ani nie są przesadnie głośne, ani prądożerne i co lepsze, ani w TUFie A15 ani w poprzednim ROGu G15 nie miałem problemu z cewkami. Nie słyszałem też, żeby inni mieli a polecałem sporo tych laptopów ludziom.  Podobnie kwestia np Lenovo LOQ czy Legionów się tyczy - tutaj też zero odzewu że jest głośno czy coś piszczy.  W rękach miałem też kilka HP Omenów i podobna kwestia, cisza    Wiem, że onegdaj piszczały cewki w serii GTX 1xxx i chyba w pierwszych RTXach. Na forach ludzie trochę narzekali, ale te nowsze serie 3xxx i 4xxx są już zupełnie spoko. .... natomiast AORUS 17G już taki problem ma. Jak się odpali coś w 300 fpsach (np cs go) to zanim wentylator wskoczy w trybie cichym to słychać jak piszczy zasilanie od GPU.
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...