Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serverneustart bei Fehlermeldung C++



Sk3y
08.01.2010, 13:48
Hallo jeder der einen Server hat kennt das problem das irgendwann mal eine Fehlermeldung im windows auftaucht. Wer diese hat klickt diese weg und und schon startet der server neu (manuell oder automatisch).

Das problem an der geschichte ist das der Gmod-Server solange wie der Fehler da ist nicht mehr erreichbar ist.

Ich hab mal 5 Minuten google genutzt und etwas gefunden was uns allen eventuell helfen könnte.


#include <stdio.h>
#include <windows.h>

int main()
{
while ( 1 )
{
printf("Trying to find Window...\n");
HWND handle = FindWindow(0,"ProgDVB.exe - Fehler in Anwendung");
if ( handle )
{
printf("Window found...\n");
HWND button = FindWindowEx(handle,0,0,"OK");
if ( button )
{
SendMessage(button,BM_CLICK,0,0);
printf("Button clicked...\n");
} else {
printf("Button not found...\n");
}
} else {
printf("Window not found...\n");
}
sleep(5000);
}
return 0;
}

Soweit ich das verstanden habe sucht der Code nach dem fensternamen "ProgDVB.exe - Fehler in Anwendung". Klar ist soweit das man den namen bloss anpassen bräuchte. Ich bin der meinung das die Server mehr als eine art dieser nachrichten ausspucken.

Was möchte ich von euch nun?

Ganz einfach, ich brauche jemanden der es mir ermöglicht noch weitere fehlermeldungen hinzufügen zu können. Nachzuschauen ob das auch wirklich funktioniert wäre auch nicht schlecht.

Mfg

A.I.
08.01.2010, 14:06
Sowas ähnliches hab ich schonmal in AutoIT programmiert.

Gib in die config die Pfad Startparameter des Servers ein und starte die Exe.
http://www.garrysmod.de/forum/showthread.php?t=22986

Oder benutze einfach ServerChecker.

don-banane
08.01.2010, 14:15
#include <stdio.h>
#include <windows.h>

int main()
{
while ( 1 )
{
printf("Trying to find Window...\n");
closeWnd("Fenstername1");
closeWnd("Fenstername2");
//...
sleep(5000);
}
return 0;
}

void closeWnd(LPCSTR wndName)
{
HWND handle = FindWindow(0,wndname);
if ( handle )
{
printf("Window found...\n");
HWND button = FindWindowEx(handle,0,0,"OK");
if ( button )
{
SendMessage(button,BM_CLICK,0,0);
printf("Button clicked...\n");
} else {
printf("Button not found...\n");
}
}
}


Für jede Fehlermeldung ein weiteres closeWnd oben hinzufügen. (Ungetestet)

Sk3y
08.01.2010, 15:19
Danke don-banane ich teste es mal.

@A.I. ich benutze Serverchecker für derzeit 3 Server. Leider ist dein Programm nicht für mehrere server ausgelegt, sodass ich deines nicht nutzen kann. Leider hat aber serverchecker auch nicht nicht das was du schon drinne hast. Daher danke ich für deinen post aber nutzen kann ich es nicht.

Mfg
Doppelpost:
Sry für den doppelpost.

@don ich erhalte folgende fehlermeldungen.


[BCC32 Fehler] File1.cpp(9): E2268 Aufruf der undefinierten Funktion 'closeWnd'
[BCC32 Fehler] File1.cpp(12): E2268 Aufruf der undefinierten Funktion 'sleep'
[BCC32 Warnung] File1.cpp(14): W8066 Code wird nie erreicht ##ist mir schon klar bei der whileschleife
[BCC32 Fehler] File1.cpp(19): E2451 Undefiniertes Symbol 'wndname'


CodeGear™ C++Builder® 2009 Version 12.0.3170.16989 benutze ich. Habe keine Updates installiert.

Könntest du mir vllt sagen was daran jetzt verkehrt ist?

Mfg

don-banane
08.01.2010, 22:57
CloseWnd muss natürlich vor main stehen, der Rest war nur Groß/Kleinschreibungs-bedingt.



#include <stdio.h>
#include <windows.h>

void closeWnd(LPCSTR wndName)
{
HWND handle = FindWindow(0,wndName);
if ( handle )
{
printf("Window found...\n");
HWND button = FindWindowEx(handle,0,0,"OK");
if ( button )
{
SendMessage(button,BM_CLICK,0,0);
printf("Button clicked...\n");
} else {
printf("Button not found...\n");
}
}
}

int main()
{
while ( 1 )
{
printf("Trying to find Window...\n");
closeWnd("Fenstername1");
closeWnd("Fenstername2");
//...
Sleep(5000);
}
return 0;
}

Sk3y
08.01.2010, 23:35
Danke :) es läuft und das sogar sehr gut :)

Frisst zwar dauerhaft 5.800 K laut taskmanager aber hey egal xD
Es fehlte sogar noch eine .h aber naja :)

Ich werd es auf unserem Server mal testen und dann als zusatz für den Serverchecker vorschlagen. Mal schauen ob ich es hinbekomme das ich logs damit anfertigen kann.

Mfg

don-banane
09.01.2010, 00:00
Irgentwas machst du da gewaltig falsch, das Programm braucht bei mir nur 430 K, und eine .h braucht man erst recht nicht :|
(Ich compile mit Visual C++)

Edit: Ok, hab jetzt das Programm erweitert:

http://www.abload.de/img/ehandlervd2i.jpg

Man muss eine windownames.txt im gleichen Ordner wie die exe haben, jedes Fenster muss in eine neue Zeile geschrieben werden. Leerzeilen werden ignoriert.

Der Source Code ist dabei ;)