Abbildpfadname eines Prozesses abfragen. Prozess abhängig von seinem Abbildpfadnamen (Ausführungspfad, ExecutablePath) neustarten
Hallo,
So wie es aussieht bin ich wohl der erste mit so einer Frage hier, sodass es mich sehr wundert, dass es "so selten" vorkommt, wie es zu vermuten wäre.
Gruß
evinben
Kurz zu dem Vorhaben:
Einige Prozesse müssen öfters beendet und neugestartet werden. Da jedoch deren Pfade sich ändern, müssen die Pfade zuerst abgefragt und in Variable gesetzt werden und erst dann die Prozesse beendet und neu gestartet werden.
Daher wird eine Lösung zum Abfragen des Abbildpfadnamens eines Prozesses benötigt.
Wenn es per Batch umständlich realisierbar ist, dann eventuell per VBS.
Wobei Batch wäre jedenfalls zu bevorzugen, da der Hauptcode in Batch ist
wie kann der Abbildpfadname eines Prozesses abgefragt werden?
So wie es aussieht bin ich wohl der erste mit so einer Frage hier, sodass es mich sehr wundert, dass es "so selten" vorkommt, wie es zu vermuten wäre.
Gruß
evinben
Kurz zu dem Vorhaben:
Einige Prozesse müssen öfters beendet und neugestartet werden. Da jedoch deren Pfade sich ändern, müssen die Pfade zuerst abgefragt und in Variable gesetzt werden und erst dann die Prozesse beendet und neu gestartet werden.
Daher wird eine Lösung zum Abfragen des Abbildpfadnamens eines Prozesses benötigt.
Wenn es per Batch umständlich realisierbar ist, dann eventuell per VBS.
Wobei Batch wäre jedenfalls zu bevorzugen, da der Hauptcode in Batch ist
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 204390
Url: https://administrator.de/contentid/204390
Ausgedruckt am: 23.11.2024 um 03:11 Uhr
17 Kommentare
Neuester Kommentar
Wenns auch ein VBS Skript sein darf:
Beispielausgabe:
CommandLine: "notepad.exe" C:\boot.ini
ExecutablePath: C:\WINDOWS\system32\notepad.exe
Name: notepad.exe
Wenn man Commandline und Name nicht braucht, kann mans auch weglassen.
Wenn man in Zeile 7 where Name='notepad.exe' weglässt, dann listet das Skript alle auf.
On Error Resume Next
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process where Name='notepad.exe'", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
WScript.Echo "CommandLine: " & objItem.CommandLine
WScript.Echo "ExecutablePath: " & objItem.ExecutablePath
WScript.Echo "Name: " & objItem.Name
Next
CommandLine: "notepad.exe" C:\boot.ini
ExecutablePath: C:\WINDOWS\system32\notepad.exe
Name: notepad.exe
Wenn man Commandline und Name nicht braucht, kann mans auch weglassen.
Wenn man in Zeile 7 where Name='notepad.exe' weglässt, dann listet das Skript alle auf.
Ich kenne mich jetzt mit WMIC nicht sonderlich gut aus, ich habe meine meisten Sachen immer gleich komplett in VBS geskriptet, da Batch doch manche Beschränkung hat.
Aber die Idee von @DerWoWusste mit Powershell ist gut.
Aber die Idee von @DerWoWusste mit Powershell ist gut.
Hallo evinben,
du könntest folgendes mal versuchen (ungetestet):
Gruss,
du könntest folgendes mal versuchen (ungetestet):
for %%d in (
notepad.exe
cmd.exe
) do for /f "tokens=*" %%e in ('wmic process get ExecutablePath^|findstr /i /c:"%%d"') do (
for /f "delims=" %%f in ("%%~e") do (
rem Abbildpfadname anzeigen:
echo "%%~f"
rem taskkill /T /F /IM %%d
rem start "" "%%~f"
)
)
Gruss,
Hey,
Die Leerzeichen können so entfernt werden:
Gruss.
defined
kann bei Forschleifenparametern nicht verwendet werden. Richtig ist:if "%%~a"==""
Die Leerzeichen können so entfernt werden:
for /f "tokens=1*delims==" %a in ('wmic process where "name='explorer.exe' OR name='iexplore.exe'" get ExecutablePath /value') do @for /f "delims=" %c in ("%~b") do @echo "%~c"
Gruss.
Hey,
das Gleichheitszeichen nach dem Gleichheitszeichen führt dazu, dass die
Die überzähligen Wagenrücklaufzeichen ("carriage return", CR, ASCII 13, HEX
Diese unerwünschten Doppel-
Zu deinem Code noch ein Vorschlag:
Gruss.
das Gleichheitszeichen nach dem Gleichheitszeichen führt dazu, dass die
for /f
Schleife dieses als Tokentrenner betrachtet. Aus dem Token ExecutablePath=C:\windows\Explorer.EXE
werden die Token ExecutablePath
und C:\windows\Explorer.EXE
.Die überzähligen Wagenrücklaufzeichen ("carriage return", CR, ASCII 13, HEX
x0d
) werden von wmic aus nur M$ bekannten Gründen produziert und verunstalten die Konsolenausgabe sowie die Variablenzuweisung mit set
. Wenn die wmic Ausgabe duch ein Hexdump-Programm gepiped wird, kann zB folgendes beobachtet werden:0000000: 0d 0d 0a 0d 0d 0a 45 78 65 63 75 74 61 62 6c 65 ......Executable
0000010: 50 61 74 68 3d 43 3a 5c 77 69 6e 64 6f 77 73 5c Path=C:\windows\
0000020: 45 78 70 6c 6f 72 65 72 2e 45 58 45 0d 0d 0a 0d Explorer.EXE....
0000030: 0d 0a 0d 0d 0a 0d 0d 0a ........
0d
zu entfernen gelingt am besten, wenn die Ausgabe mit einer weiteren Forschleife "gefiltert" wird.Zu deinem Code noch ein Vorschlag:
@ECHO OFF &SETLOCAL
for /f "tokens=1*delims==" %%a in ('wmic process where "name='explorer.exe' OR name='iexplore.exe'" get ExecutablePath /value') do (
for /f "delims=" %%c in ("%%~b") do (
rem Abbildpfadname anzeigen:
set "ExecPath=%%~c"
echo Folgender Prozess wird beendet: "%%~c"
taskkill /T /F /IM %%d
start "" "%%~c" &&echo Folgender Prozess ist neugestartet worden: "%%~c"
echo(
)
)
if not defined ExecPath echo(Prozesse nicht gefunden!