Batch kontrolliert, ob ein Task gestartet ist, und startet ein Program
Hallo,
bin neu hier, und habe leider wenug Erfahrung mit Batch-Datein...
kann jemand eine Batch-Datei erzeugen, die ständig läuft
(kann auch alternativ minutlich als 'Geplannten Task' gestartet werden)
und minutlich abfragt, ob ein bestimmtes Program(Task: hier scgui32.exe) läuft,
dann, wenn das Program läuft, wird ein weiteres Program (hier c:\temp\cercala.exe) gestartet und das 1. Program (scgui32.exe) gekillt.
Hintergrund: das 1. Program wird nicht wahrgenommen welches aus einer Anwendung gelegentlich gestartet wird. Damit es akustisch und visuell Wahrgenommen werden kann, wird das 2. Program gestartet. Damit das ganze auch ein weiteres mal klappt, muß das 1. Program wieder geschlossen werden.
Danke im vorraus
bin neu hier, und habe leider wenug Erfahrung mit Batch-Datein...
kann jemand eine Batch-Datei erzeugen, die ständig läuft
(kann auch alternativ minutlich als 'Geplannten Task' gestartet werden)
und minutlich abfragt, ob ein bestimmtes Program(Task: hier scgui32.exe) läuft,
dann, wenn das Program läuft, wird ein weiteres Program (hier c:\temp\cercala.exe) gestartet und das 1. Program (scgui32.exe) gekillt.
Hintergrund: das 1. Program wird nicht wahrgenommen welches aus einer Anwendung gelegentlich gestartet wird. Damit es akustisch und visuell Wahrgenommen werden kann, wird das 2. Program gestartet. Damit das ganze auch ein weiteres mal klappt, muß das 1. Program wieder geschlossen werden.
Danke im vorraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 73443
Url: https://administrator.de/contentid/73443
Ausgedruckt am: 28.03.2024 um 20:03 Uhr
4 Kommentare
Neuester Kommentar
Hallo imkrl001 und willkommen im Forum!
Da Du Dein Betriebssystem nicht genannt hast, unterstelle ich einmal XP oder später (ich war versucht, "höher" zu schreiben, fand das aber im Hinblick auf Vista nicht unbedingt angemessen).
Ein Endlosbatch dafür könnte so aussehen:
Falls Du die Pause zwischen den Überprüfungen nicht benötigst, einfach "::" vor die Zeile "ping ..." schreiben - damit wird die Zeile zum Kommentar und nicht ausgeführt (natürlich kannst Du sie auch ganz entfernen, wenn Du sie sicher nicht brauchen wirst).
Grüße
bastla
Da Du Dein Betriebssystem nicht genannt hast, unterstelle ich einmal XP oder später (ich war versucht, "höher" zu schreiben, fand das aber im Hinblick auf Vista nicht unbedingt angemessen).
Ein Endlosbatch dafür könnte so aussehen:
@echo off & setlocal
set "Tsk=scgui32.exe"
set "Prog=c:\temp\cercala.exe"
:Loop
set Running=
for /f %%i in ('tasklist') do echo (%%i)|findstr /C:"(%Tsk%)" >nul && set Running=True
if not defined Running goto :Pause
start "" "%Prog%"
taskkill /IM "%Tsk%" >nul
:Pause
::15 s Pause
ping -n 15 localhost>nul
goto :Loop
Grüße
bastla
Hallo imkrl001!
Für die Anforderung "wenn eine bestimmte Task mehr als einmal läuft ... ein Program startet, ... die neuere der beiden Task killt" würde ich eher auf VBScript zurückgreifen. Ebenfalls als Endlosschleife laufend könnte das so aussehen:
Das Script killt alle "scgui32.exe"-Tasks mit Ausnahme des ältesten (festgestellt anhand des "CreationDate" im Format "20071115191028.750000+060") und startet für den Fall, dass zumindest ein Task beendet werden musste (und demnach gleichzeitig mindestens zwei aktiv waren) das angegebene Programm ("cercala.exe"). Beendet wird dieses Programm allerdings nicht wieder durch das Script, sodass also zwar nach spätestens 30 Sekunden immer nur ein "scgui32.exe"-Task läuft, es aber viele "cercala.exe"-Tasks geben könnte.
Das Script selbst läuft übrigens als Task "wscript.exe" (nur für den Fall, dass Du es auch wieder beenden wolltest ).
In diesem Zusammenhang wäre vielleicht auch noch ein Hinweis auf den "ProcessExplorer" (einstmals von "SysInternals", jetzt MS) angebracht. Damit kannst Du die laufenden Tasks viel besser, als dies mit dem Taskmanager oder über die Kommandozeile möglich ist, überblicken.
Grüße
bastla
Für die Anforderung "wenn eine bestimmte Task mehr als einmal läuft ... ein Program startet, ... die neuere der beiden Task killt" würde ich eher auf VBScript zurückgreifen. Ebenfalls als Endlosschleife laufend könnte das so aussehen:
strTask = "scgui32.exe"
strProg = "c:\temp\cercala.exe"
Set WshShell = WScript.CreateObject("WScript.Shell")
strComputer = "."
Do
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process",,48)
strOldest = "9"
For Each objItem in colItems
If LCase(objItem.Name) = strTask Then
If objItem.CreationDate < strOldest Then strOldest = objItem.CreationDate
End If
Next
bRun = False
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process",,48)
For Each objItem in colItems
If LCase(objItem.Name) = strTask Then
If objItem.CreationDate <> strOldest Then
objItem.Terminate
bRun = True
End If
End If
Next
If bRun Then WshShell.Run strProg 'Programm starten
WScript.Sleep 30000 '30 Sekunden Pause
Loop
Das Script selbst läuft übrigens als Task "wscript.exe" (nur für den Fall, dass Du es auch wieder beenden wolltest ).
In diesem Zusammenhang wäre vielleicht auch noch ein Hinweis auf den "ProcessExplorer" (einstmals von "SysInternals", jetzt MS) angebracht. Damit kannst Du die laufenden Tasks viel besser, als dies mit dem Taskmanager oder über die Kommandozeile möglich ist, überblicken.
Grüße
bastla