BATCH benötigt, die Dienste beendet und wartet bbis sie nicht mehr in der Taskliste sind
Hallo,
Ich habe vor ieniger Zeit mal ein Batsch- Script erstellt, was mir betsimmte Diensete einer Software Aplikation aus der Diensteübersicht aufruft und diese dann, sofern noch nicht geschen, startet:
Nun muss ich dieses Script genau andersrum laufen lassen. Also ich muss die Dienste sauber beenden, da beim "Abschießen" evtl. noch Schreibvorgänge in Projektdateien stattfinden , die dadurch nicht abgeschlossen werden können und somit die Projektdatei ungültig machen, sodass diese erneut geladen werden muss von der Software.
Ich würde daher gern mit dem Befehl
Das Problem ist, wie bekomme ich den korrekten Namen der exe-datei, des jeweiligen Dienstes in die Variable _app_exe ?
Die Software lässt mehrere Dienste im Hintergrund laufen. Mit der ersten Abfrage, werden diese alle in eine Liste -> liste.txt geschrieben. Jetzt müsste ich noch irgendwie eine Abfrage einbauen, die die in die Liste geschriebenen Dienste in einer Schleife einliest und den Pfad zur exe-Datei des jeweiligen Dienstes in die Variable übernimmt. Und da stehe ich gerade etwas auf dem Schlauch.
Der Pfad zur exe Datei kann man sich ja über die Eigenschaften des Dienstes anzeigen lassen. Wie aber mache ich das per cmd/batch?
Grüße
Marc
Ich habe vor ieniger Zeit mal ein Batsch- Script erstellt, was mir betsimmte Diensete einer Software Aplikation aus der Diensteübersicht aufruft und diese dann, sofern noch nicht geschen, startet:
::alle APP Dienste ermitteln, die im Status "Stopped" stehen und in die Liste "liste.txt" schreiben
::-------------------------------------------------------------
wmic path win32_service get Caption, State, StartMode |findstr "APP"|findstr "Stopped" |findstr "Auto">liste.txt
SET "liste=liste.txt"
::Dienste aus "liste.txt" einlesen und starten
::-------------------------------------------------------------
for /f "tokens= 2" %%f in (%liste%) do (
ECHO The service APP %%f was not running but will be restart now:
net start "APP %%f"
SET priority=1
)
::"liste.txt" löschen
::-------------------------------------------------------------
if exist liste.txt del liste.txt
Nun muss ich dieses Script genau andersrum laufen lassen. Also ich muss die Dienste sauber beenden, da beim "Abschießen" evtl. noch Schreibvorgänge in Projektdateien stattfinden , die dadurch nicht abgeschlossen werden können und somit die Projektdatei ungültig machen, sodass diese erneut geladen werden muss von der Software.
Ich würde daher gern mit dem Befehl
:waitforservice_app
tasklist /fi "imagename eq %_app_exe%" 2>nul | find /i /n "%_app_exe:~0,25%" >nul
if %errorlevel%==0 goto waitforservice_app
Das Problem ist, wie bekomme ich den korrekten Namen der exe-datei, des jeweiligen Dienstes in die Variable _app_exe ?
Die Software lässt mehrere Dienste im Hintergrund laufen. Mit der ersten Abfrage, werden diese alle in eine Liste -> liste.txt geschrieben. Jetzt müsste ich noch irgendwie eine Abfrage einbauen, die die in die Liste geschriebenen Dienste in einer Schleife einliest und den Pfad zur exe-Datei des jeweiligen Dienstes in die Variable übernimmt. Und da stehe ich gerade etwas auf dem Schlauch.
Der Pfad zur exe Datei kann man sich ja über die Eigenschaften des Dienstes anzeigen lassen. Wie aber mache ich das per cmd/batch?
Grüße
Marc
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 400614
Url: https://administrator.de/forum/batch-benoetigt-die-dienste-beendet-und-wartet-bbis-sie-nicht-mehr-in-der-taskliste-sind-400614.html
Ausgedruckt am: 05.04.2025 um 01:04 Uhr
7 Kommentare
Neuester Kommentar

Immer noch am Batschen
, sowas macht man doch heutezutage mit PS, naja wenn man's unbedingt kryptisch mag bidde
Gruß l.
@echo off
for /f "usebackq delims=" %%a in ("C:\liste.txt") DO (
echo checking service exe for service '%%a'
for /f "tokens=1,2* delims==" %%b in ('wmic service where Name^="%%~a" get PathName /value ^| find "="') do call :CHECK "%%~nc"
)
goto :EOF
:CHECK
tasklist /fi "IMAGENAME eq %~1.*" | findstr /ilc:"%~1" >nul 2>&1 && echo Waiting for '%~1' to terminate. & timeout /t 1 >nul & goto :CHECK || echo '%~1' terminated.

Klappt hier aber
, dann sind deine Services in der Textdatei nicht mit dem Servicenamen sondern displaynamen aufgelistet...
Hausaufgabe die du jetzt mit der Vorlage auch selbst lösen kannst. Ist ja schon Mundgerecht serviert worden.
aber wenn du das unbedingt willst
Hausaufgabe die du jetzt mit der Vorlage auch selbst lösen kannst. Ist ja schon Mundgerecht serviert worden.
1. Alle Dienste auflisten, die mit "APP" beginnnen
Das ist Blödsinn, dazu gehören dann auch Windows-Services ...Stopped AppIDSvc Anwendungsidentität
Running Appinfo Anwendungsinformationen
Running Apple Mobile De... Apple Mobile Device Service
Stopped AppMgmt Anwendungsverwaltung
Stopped AppReadiness App-Vorbereitung
Stopped AppVClient Microsoft App-V Client
Running AppXSvc AppX-Bereitstellungsdienst (AppXSVC)
Stop-Service -Name APP* -Force

So sehen die Dienstnamen beispielhaft bei uns aus
Das sind Displaynamen keine echten Dienstnamen die intern verwendet werden und auf die habe ich das Skript oben ausgelegt! Kannst du aber leicht anpassen indem du stattdessen in der Where Bedingung des wmic Befehls die entsprechende Eigenschaft DisplayName angibst