Nur Prozess per Batch starten wenn nicht vorhanden
Hallo,
ich hab folgendes Problem.
Wie bekomme ich ein Start eines Prozesses hin mit vorheriger Prüfung ob dieser schon läuft.
Kleines Beispiel: In meiner Batch werden zwei .exe Dateien gestartet, jedoch soll die erste nur gestartet werden, wenn diese noch nicht gestartet wurde.
Ich hoffe es ist verständlich, ich dachte an eine For Schleife mit Abfrage der laufenden Prozesse oder so...
Ich bekomme es leider nicht hin
Kann mir einer helfen?
ich hab folgendes Problem.
Wie bekomme ich ein Start eines Prozesses hin mit vorheriger Prüfung ob dieser schon läuft.
Kleines Beispiel: In meiner Batch werden zwei .exe Dateien gestartet, jedoch soll die erste nur gestartet werden, wenn diese noch nicht gestartet wurde.
Ich hoffe es ist verständlich, ich dachte an eine For Schleife mit Abfrage der laufenden Prozesse oder so...
Ich bekomme es leider nicht hin
Kann mir einer helfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 20169
Url: https://administrator.de/forum/nur-prozess-per-batch-starten-wenn-nicht-vorhanden-20169.html
Ausgedruckt am: 19.02.2025 um 22:02 Uhr
6 Kommentare
Neuester Kommentar
Moin MuriBln,
ich würde es in diesem Fall nicht über (eigene) For-Schleifen machen, sondern mit einem dieser vielen Prozesslister. Ich glaube, sogar M$ liefert schon irgendetwas mit, aber ich verwende meist das "psList"-Utiltily von www.sysinternals.com.
Mit den meisten Prozess-Listern kannst Du gezielt nach einem Prozess fragen und bekommt ein ErrorLevel zurück, falls Prozess nicht vorhanden. Damit reduziert sich Dein Programmieraufwand auf eine halbe Zeile. Beispiel: Test, ob Internet-Explorer ("IEXPLORE") gestartet:
iexploder not found!
(alles ok, kommt kein echo)
oder, in Deinem Fall
Falls Du einen Prozesslister benutzt, den Du nicht nach einzelnen Prozessen fragen kannst:
Thats all. HTH
Biber
[Edit] Habe noch mal meinen Prompt, bisher dargestellt als ">"-Zeichen, geändert in "$MyPrompt$", um Verwechslungen zu vermeiden. [/Edit]
ich würde es in diesem Fall nicht über (eigene) For-Schleifen machen, sondern mit einem dieser vielen Prozesslister. Ich glaube, sogar M$ liefert schon irgendetwas mit, aber ich verwende meist das "psList"-Utiltily von www.sysinternals.com.
Mit den meisten Prozess-Listern kannst Du gezielt nach einem Prozess fragen und bekommt ein ErrorLevel zurück, falls Prozess nicht vorhanden. Damit reduziert sich Dein Programmieraufwand auf eine halbe Zeile. Beispiel: Test, ob Internet-Explorer ("IEXPLORE") gestartet:
oder, in Deinem Fall
Falls Du einen Prozesslister benutzt, den Du nicht nach einzelnen Prozessen fragen kannst:
Biber
[Edit] Habe noch mal meinen Prompt, bisher dargestellt als ">"-Zeichen, geändert in "$MyPrompt$", um Verwechslungen zu vermeiden. [/Edit]
Hmm, MuriBln,
möglicherweise hast Du das Größerzeichen ">" mit eingegeben, mit dem ich nur meinen CMD-Prompt andeuten wollte.
Machs erst Schrittweise vom CMD-Prompt und kopier Dir dann die funktionierende Zeile in einen Editor bzw. in eine Batch-Datei.
(an CMD-Prompt)pslist
(erzeugt eine meterlange Liste)
PsList 1.26 - Process Information Lister
Copyright (C) 1999-2004 Mark Russinovich
Sysinternals - www.sysinternals.com
Process information for BIBERSBESTEN:
Name Pid Pri Thd Hnd Priv CPU Time Elapsed Time
Idle 0 0 1 0 0 10:01:42.062 0:00:00.000
System 4 8 48 564 0 0:02:06.602 0:00:00.000
IEXPLORE 1512 8 39 1216 50432 0:02:08.975 10:49:37.386
...
So oder ähnlich wird es auch bei Deinem Query-Tool sein - das hab ich nicht.
Step zwei: nur nachsehen, ob "IEXPLORE" dabei ist:
(am CMD-Prompt)pslist|find "IEXPLORE"
IEXPLORE 1512 8 39 1218 50432 0:02:09.526 11:00:50.834
Step drei: nur nachsehen, ob "IEXPLORE" dabei ist und den Output wegwerfen:
(am CMD-Prompt)pslist|find "IEXPLORE">nul
(am CMD-Prompt)echo %ErrorLevel%
(Output)0
0 bedeutet in dem Fall "gefunden", "1" würde "nicht gefunden" heißen.
Step 4:
bedeutet: wenn das Krams in der Klammer "(....)" einen ErrorLevel > 0 erzeugt, dann echo bla
Wenn Du es bis hierhin hast (mit Deinem Query-Tool), dann schaffst Du den Rest ohne mich.
Grüße Biber
möglicherweise hast Du das Größerzeichen ">" mit eingegeben, mit dem ich nur meinen CMD-Prompt andeuten wollte.
Machs erst Schrittweise vom CMD-Prompt und kopier Dir dann die funktionierende Zeile in einen Editor bzw. in eine Batch-Datei.
(an CMD-Prompt)pslist
(erzeugt eine meterlange Liste)
PsList 1.26 - Process Information Lister
Copyright (C) 1999-2004 Mark Russinovich
Sysinternals - www.sysinternals.com
Process information for BIBERSBESTEN:
Name Pid Pri Thd Hnd Priv CPU Time Elapsed Time
Idle 0 0 1 0 0 10:01:42.062 0:00:00.000
System 4 8 48 564 0 0:02:06.602 0:00:00.000
IEXPLORE 1512 8 39 1216 50432 0:02:08.975 10:49:37.386
...
So oder ähnlich wird es auch bei Deinem Query-Tool sein - das hab ich nicht.
Step zwei: nur nachsehen, ob "IEXPLORE" dabei ist:
(am CMD-Prompt)pslist|find "IEXPLORE"
IEXPLORE 1512 8 39 1218 50432 0:02:09.526 11:00:50.834
Step drei: nur nachsehen, ob "IEXPLORE" dabei ist und den Output wegwerfen:
(am CMD-Prompt)pslist|find "IEXPLORE">nul
(am CMD-Prompt)echo %ErrorLevel%
(Output)0
0 bedeutet in dem Fall "gefunden", "1" würde "nicht gefunden" heißen.
Step 4:
bedeutet: wenn das Krams in der Klammer "(....)" einen ErrorLevel > 0 erzeugt, dann echo bla
Wenn Du es bis hierhin hast (mit Deinem Query-Tool), dann schaffst Du den Rest ohne mich.
Grüße Biber