Anhand Anwendungsnamen prüfen, ob Anwendung gestartet ist
Hallo Admins,
ich habe einen Win Server 2012 R2, auf dem ich ein Java-Programm laufen habe, dass öfters abstürzt. Bisher wurde es manuell wieder gestartet, aber dies nervt mit der Zeit. Ich möchte eine Batch (ggf. auch ein Programm mit Borland Delphi) schreiben, die in regelmäßigen Abständen durch die Aufgabenverwaltung gestartet werden kann und nachschaut, ob mein Java-Programm noch aktiv ist. Dabei kann ich NICHT nach der Prozess-Bezeichnung suchen, da diese (wie andere PRozesse auf dem Server auch) nur java.exe heißt. ICh muss über die Bezeichnung der Anwendung "Mein Programm" (ja, mit Leerzeichen dazwischen) gehen. Sollte die Anwendung nicht aktiv sein, muss die Batch sie erneut starten. Sollte sie aktiv sein, soll durch die Batch nix geschehen.
Habt Ihr einen Vorschlag, wie man das realisieren kann?
Viele Grüße,
Sinzal
ich habe einen Win Server 2012 R2, auf dem ich ein Java-Programm laufen habe, dass öfters abstürzt. Bisher wurde es manuell wieder gestartet, aber dies nervt mit der Zeit. Ich möchte eine Batch (ggf. auch ein Programm mit Borland Delphi) schreiben, die in regelmäßigen Abständen durch die Aufgabenverwaltung gestartet werden kann und nachschaut, ob mein Java-Programm noch aktiv ist. Dabei kann ich NICHT nach der Prozess-Bezeichnung suchen, da diese (wie andere PRozesse auf dem Server auch) nur java.exe heißt. ICh muss über die Bezeichnung der Anwendung "Mein Programm" (ja, mit Leerzeichen dazwischen) gehen. Sollte die Anwendung nicht aktiv sein, muss die Batch sie erneut starten. Sollte sie aktiv sein, soll durch die Batch nix geschehen.
Habt Ihr einen Vorschlag, wie man das realisieren kann?
Viele Grüße,
Sinzal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 299289
Url: https://administrator.de/forum/anhand-anwendungsnamen-pruefen-ob-anwendung-gestartet-ist-299289.html
Ausgedruckt am: 14.04.2025 um 16:04 Uhr
6 Kommentare
Neuester Kommentar
Hi Sinzal,
sofern dein Programm ein eigenes Fenster hat, kannst du nach danach suchen lassen:
Beispiel
sofern dein Programm ein eigenes Fenster hat, kannst du nach danach suchen lassen:
Beispiel
Morgen Sinzal,
ich Poste hier nochmal den Code, um das Ganze zu verdeutlichen:
Den angegeben Namen in der Variable $Program wird in der Tat als MEINPROGRAMMNAME.exe gesucht (siehe Zeile 05).
Da dein Fenstertitel nicht gleich dem Prozessnamen entspricht kannst Du wie folgt vorgehen. In der Variable $CheckProgramResponding sind bereits alle Information hinterlegt: Somit wird nicht mehr das Programm nachdem Namen des Prozesses beendet (siehe geänderte Zeile 05), sondern nachdem Namen des Fenstertitels.
Gruß, Sascha
ich Poste hier nochmal den Code, um das Ganze zu verdeutlichen:
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
$Program = "MEINPROGRAMMNAME"
$CheckProgramResponding = Get-Process $Program | Where-Object {$_.MainWindowHanlde -ne 0} | Select-Object Name, Responding, MainWindowTitle
IF (!$CheckProgramResponding.Responding){
Write-Host "Reagiert nicht! Werde es beenden.."
TASKKILL /F /T /IM "$Program.exe"
Write-Host "Beendet! Starte es neu.."
Start-Process PFADZUMEINEMPROGRAMM
} ELSE {
Write-Host "Reagiert!"
}
Da dein Fenstertitel nicht gleich dem Prozessnamen entspricht kannst Du wie folgt vorgehen. In der Variable $CheckProgramResponding sind bereits alle Information hinterlegt:
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
$Program = "MEINPROGRAMMNAME"
$CheckProgramResponding = Get-Process $Program | Where-Object {$_.MainWindowHanlde -ne 0} | Select-Object Name, Responding, MainWindowTitle
IF (!$CheckProgramResponding.Responding){
Write-Host "Reagiert nicht! Werde es beenden.."
TASKKILL /F /T /FI "WINDOWTITLE eq $($CheckProgramResponding.MainWindowTitle)"
Write-Host "Beendet! Starte es neu.."
Start-Process PFADZUMEINEMPROGRAMM
} ELSE {
Write-Host "Reagiert!"
}
Gruß, Sascha