[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/privacyprotection/cron/task/anonymize_ip.php on line 83: A non-numeric value encountered
Inoffizielles deutsches Xbase-Forum • anderes Programm beenden [ERLEDIGT]
Seite 1 von 2

anderes Programm beenden [ERLEDIGT]

Verfasst: Fr, 27. Sep 2019 18:16
von Manfred
Zu diesem Thema gibt es hier etliches im Forum, aber irgendwie hilft es mir nicht weiter.
Ich habe einen Webserver mit xb2net geschrieben, der derzeit (noch) nicht als Dienst läuft, sondern als normales Programm. Ist so und muß auch erstmal so bleiben. Leider passiert es zwischendurch immer wieder einmal, das der Webserver hängt. Dann muß er von Hand beendet und neu gestartet werden. Auch wieder leider, das wird nicht sofort festgestellt, aber die Zugriffe über das Web sind dann nicht mehr möglich. Da parallel ein weiteres Programm läuft auf dem gleichen Server, das regelmäßig Überprüfungen startet, würde ich ganz gerne in dem Durchlauf eine kleine Prüfung einbauen, ob der Webserver antwortet. Das habe ich alles schon eingebaut. Jetzt würde ich gerne zusätzlich zur Mailinfo aus der Routine noch die Möglichkeit haben, den Webserver zu beenden (das geht dann händisch nur über den Taskmanager auf die brutale Methode) und zwar so, als wenn ich dem Taskmanager das sage und dann wieder neu zu starten.
Geht das mit Bordmitteln, oder muß man dafür Zusatzbibliotheken haben? Bei Diensten scheint das ja irgendwie zu klappen.

Re: anderes Programm beenden

Verfasst: Mo, 30. Sep 2019 12:28
von andreas
Das sollte über Win32-API-Funktionen gehen. Leider kann ich dir diese jetzt nicht so aus dem Kopf nennen.

Re: anderes Programm beenden

Verfasst: Mo, 30. Sep 2019 12:29
von Manfred
ermitteln, rausschmeißen?

Re: anderes Programm beenden

Verfasst: Mo, 30. Sep 2019 12:38
von andreas
FindWindow - ermitteln
OpenProcess - Zugreifen
TerminateProcess - abschießen

Re: anderes Programm beenden

Verfasst: Mo, 30. Sep 2019 12:40
von Jan
Manfred,

2. Treffer auf Google sagt das hier: https://www.c-plusplus.net/forum/topic/ ... %C3%9Fen/7

Mußt Du jetzt nur noch auf Xbase++ umschreiben :badgrin: :D

Jan

Re: anderes Programm beenden

Verfasst: Mo, 30. Sep 2019 12:49
von andreas
PostMessage könnte man nehmen, wenn das Programm noch darauf reagieren würde. Sonst muss über TerminateProcess das Programm hart abgeschossen werden, was dem Prozess beenden aus dem Task-Manager entspricht.

Re: anderes Programm beenden

Verfasst: Mo, 30. Sep 2019 12:50
von Manfred
das wäre es, wenn ich es machen muß, dann geht es eh nur über den Weg.

Re: anderes Programm beenden

Verfasst: Mo, 30. Sep 2019 15:05
von flanelli
wenn etwas hängt und daher nicht mehr reagiert hilft einfach nur noch abschneiden oder hängen lassen :lol:

ich entschuldige mich gleich, falls das jemand mißverstehen könnte ( weil ich habs eh so gemeint *g* )

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 6:13
von AUGE_OHR
Manfred hat geschrieben: Mo, 30. Sep 2019 12:50 das wäre es, wenn ich es machen muß, dann geht es eh nur über den Weg.
du redest von "Stop" und "Start".

ich würde dazu die CLASS TRunProcess von Pablo nutzen.
Der Vorteil ist das "Stop" / "Start" vorhanden ist und man ein Handle bekommt für API Sachen
TRunProcess.zip
NEED ot4xb
(3.95 KiB) 320-mal heruntergeladen
---

im Taskmanger "sieht" man die Namen von den Titel eines "Fenster". Damit kann man dann das Handle des "Fenster" ermitteln.
wenn man das "Main Fenster" hat kann man an das "Fenster" einen Event wie WM_CLOSE oder WM_QUIT senden und die App wird gestoppt

wenn du einen Dienst hast gibt es kein "Fenster". hier kommt nun die ProcessID ins Spiel
such mal nach "GetWindowThreadProcessId" hier im Forum
https://docs.microsoft.com/en-us/window ... dprocessid

einen solchen Thread muss man nun mit "TerminateProcess" abschliessen wie es Andreas gesagt hat

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 6:52
von Manfred
ich habe es gestern hiermit versucht
viewtopic.php?f=16&t=8858
bin aber nicht weiter gekommen, weil es irgendwie nicht klappen wollte. Ich vermute einmal, das ich da was falsch gemacht habe.

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 8:18
von AUGE_OHR
Manfred hat geschrieben: Mi, 02. Okt 2019 6:52 ich habe es gestern hiermit versucht
hast du es mit der Ot4xb Lösung oder mit der "pure" Xbase++ von AP++ gemacht :?:
wäre schon ganz hilfreich wenn man mehr Infos hätte ...

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 8:20
von Manfred
sorry, ich habe es mit pure xbase++ von app++ versucht.

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 8:46
von AUGE_OHR
Manfred hat geschrieben: Mi, 02. Okt 2019 8:20 sorry, ich habe es mit pure xbase++ von app++ versucht.
ich habe das Demo ausprobiert mit diesem Code

Code: Alles auswählen

PROCEDURE Main()
   IF WinApi():KillWindow("Rechner")
   ELSE
       ALERT("Error")
   ENDIF
RETURN
und Calc.EXE wird damit geschlossen.

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 8:59
von Manfred
bei mir klappt es nicht.

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 9:16
von AUGE_OHR
Manfred hat geschrieben: Mi, 02. Okt 2019 8:59 bei mir klappt es nicht.
:shock:

Xbase++ v1.9x oder v2.x :?:
wo steigt er denn aus ( Debugger) bei dem Demo :?:

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 9:20
von Manfred
2.0
das Programm steigt nicht aus, es schließt einfach nicht das gewünschte Programm. Es wird bei ::FindWindow() eine 0 zurückgeliefert. Wobei ich nicht verstehe was der Parameter oClass zu besagen hat.

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 9:58
von AUGE_OHR
Manfred hat geschrieben: Mi, 02. Okt 2019 9:20 2.0
das Programm steigt nicht aus, es schließt einfach nicht das gewünschte Programm. Es wird bei ::FindWindow() eine 0 zurückgeliefert.
also klappt der DLL Aufruf nicht. :o
hm ... wurde in der v2.x nicht was geändert :?:
Manfred hat geschrieben: Mi, 02. Okt 2019 9:20 Wobei ich nicht verstehe was der Parameter oClass zu besagen hat.
für eine Xbase++ App wäre oClass = XbpDialog

wenn es sich um nicht Xbase++ App handelt muss man den Window Namen der CLASS verwenden also "Button" statt XbpPushButton.

das wir nach dem Title (Umlaute ?) suchen wird oClass nicht benötigt und ist DEFAULT 0 (#include "common.ch" )

---

wenn das später ein Dienst ohne "Fenster" werden soll wird ::FindWindow() "nachträglich" wohl nicht funktionieren.
man benötigt das Handle "beim Start" des Process. versuche doch mal das ot4xb Demo was ja nicht die Xbase++ Syntax benutzt.

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 20:06
von Manfred
also jetzt ist es raus. es muß programmname.exe dort stehen. Dann wird das Programm gekilt. Watt' n Kappes. Aber "rechner" klappt auch. Warum muß bei meinem Programm EXE dahinter stehen?

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 20:19
von AUGE_OHR
Manfred hat geschrieben: Mi, 02. Okt 2019 20:06 also jetzt ist es raus. es muß programmname.exe dort stehen. Dann wird das Programm gekilt.
schön das du es zum laufen gebracht hast =D>
Manfred hat geschrieben:Watt' n Kappes. Aber "rechner" klappt auch. Warum muß bei meinem Programm EXE dahinter stehen?
das hab ich auch noch nicht erlebt.

Re: anderes Programm beenden

Verfasst: Mi, 02. Okt 2019 22:13
von Werner_Bayern
Manfred hat geschrieben: Mi, 02. Okt 2019 20:06 Warum muß bei meinem Programm EXE dahinter stehen?
Stehts so im Manifest?

Re: anderes Programm beenden

Verfasst: Do, 03. Okt 2019 7:59
von Manfred
Hi Werner,
was müßte da wo stehen?

Re: anderes Programm beenden

Verfasst: Do, 03. Okt 2019 8:08
von Jan
Ganz spontan hatte ich mich gefragt ob das deswegen ist, weil es ja eine meinprogramm.exe und eine meinprogramm.com geben könnte. Aber wenn das bei allen anderen auch ohne Endung klappt ...

Wie unterscheidet man denn, wenn von meinprogramm.exe mehrere Instanzen laufen? Kappt man die dann alle? Oder eine davon nach Zufallsprinzip?

Jan

Re: anderes Programm beenden [ERLEDIGT]

Verfasst: Mi, 09. Okt 2019 11:07
von Manfred
das wäre jetzt auch meine Frage gewesen. Ich muß nämlich auch prüfen, ob ein Programm schon läuft. Nur, wenn ich das programm starte, dann steht es sofort im Taskmanager und würde dann sich selbst finden. Kann man also irgendwie ermitteln, ob es mehr als 1x auf ist?

Re: anderes Programm beenden [ERLEDIGT]

Verfasst: Mi, 09. Okt 2019 20:49
von azzo
Hallo Manfred,
ich beziehe den Festertitel mit ein.
LG
Otto

Re: anderes Programm beenden [ERLEDIGT]

Verfasst: Mi, 09. Okt 2019 21:20
von AUGE_OHR
hi,
Manfred hat geschrieben: Mi, 09. Okt 2019 11:07 das wäre jetzt auch meine Frage gewesen. Ich muß nämlich auch prüfen, ob ein Programm schon läuft. Nur, wenn ich das programm starte, dann steht es sofort im Taskmanager und würde dann sich selbst finden. Kann man also irgendwie ermitteln, ob es mehr als 1x auf ist?
der ganze Weg mit "FindWindow" funktioniert nur wenn man ein Fenster hat und nicht mehr wenn es ein Dienst ist.
deshalb TRunProcess von Pablo weil man da das Handle von "CreateProcess" bekommt und nicht "suchen" muss.