2012-04-22 14:36:24 +0000 2012-04-22 14:36:24 +0000
86
86

Wie kann ich die Kommandozeilenargumente eines laufenden Programms herausfinden?

Ich suche ein Werkzeug oder eine Methode, um herauszufinden, welche Kommandozeilenparameter an ein Programm übergeben wurden, z. B. wenn es von einem anderen Programm gestartet wurde (Launcher-Anwendungsszenario).

Antworten (7)

91
91
91
2012-12-15 17:29:14 +0000

Sie können dies auch ohne Process Explorer tun, indem Sie den WMI-Dienst von Windows verwenden. Führen Sie das Folgende von der Eingabeaufforderung aus:

WMIC path win32_process get Caption,Processid,Commandline

Wenn Sie die Ausgabe in eine Datei ausgeben möchten (macht es etwas einfacher zu lesen), verwenden Sie den Schalter /OUTPUT:

WMIC /OUTPUT:C:\Process.txt path win32_process get Caption,Processid,Commandline
73
73
73
2012-04-22 14:39:21 +0000

Das können Sie mit Process Explorer tun.

Fahren Sie einfach mit der Maus über einen Prozess, um die Befehlszeilenargumente zu sehen, die zum Starten des Prozesses verwendet wurden:

Alternativ können Sie die Eigenschaften des Prozesses öffnen und die Kommandozeile direkt dort inspizieren:

41
41
41
2015-10-03 07:28:36 +0000

Das kann man auch mit dem Task-Manager erreichen.

Öffnen Sie den Task-Manager (mit CTRL-SHIFT-ESC, CTRL-ALT-DELETE oder einer anderen Methode).

Für Windows 7 (und wahrscheinlich Windows XP):

  • Gehen Sie auf die Registerkarte “Prozesse”. Wählen Sie im Menü “Ansicht” den Punkt “Spalten auswählen…”.
  • Aktivieren Sie das Kontrollkästchen “Befehlszeile” und klicken Sie auf “OK”. (Sie müssen eventuell nach unten scrollen, um es zu finden)

Für Windows 8:

  • Gehen Sie zur Registerkarte “Details”. Klicken Sie mit der rechten Maustaste auf eine der Spalten (z. B. Namen, PID usw.) und wählen Sie “Spalten auswählen”.
  • Aktivieren Sie das Kontrollkästchen “Befehlszeile” und klicken Sie auf OK. (Möglicherweise müssen Sie nach unten scrollen, um es zu finden)

Eine Spalte “Befehlszeilen” wird zu den aktuell angezeigten Spalten hinzugefügt.

6
6
6
2014-08-07 05:46:54 +0000

PowerShell zur Rettung.

Finden:

Get-WmiObject Win32_Process -Filter "name = 'perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\perl\bin\perl.exe" t/Server_PreFork.t'}

Und Töten als Bonus:

Get-WmiObject Win32_Process -Filter "name = 'perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\perl\bin\perl.exe" t/Server_PreFork.t'} | ForEach-Object { Invoke-WmiMethod -Path $_.__Path –Name Terminate }

Sie können es direkt aus der Powershell oder aus einer ps1 ausführen, wenn Sie Ihr System eingerichtet haben. Ich beschreibe die uneingeschränkte Skript-Einrichtung auf i kill zombies with powershell sowie andere powershell-Tricks…

5
5
5
2018-01-27 10:39:55 +0000

Vorherige Antworten sind großartig für den Fall, dass der Prozess bereits läuft und nicht bald beendet werden wird. Wenn Sie jedoch (wie ich) dies vielleicht mit Prozessen tun müssen, die mehrmals starten und/oder schnell beendet werden, oder vielleicht Ereignisse in einem längeren Zeitraum protokollieren, gibt es eine Möglichkeit, dies mit Prozessmonitor .

Grundsätzlich protokolliert es verschiedene Ereignisse im System, in diesem Fall können wir einfach das Ereignis “Prozessstart” und den Namen des Prozesses, den wir überwachen wollen, filtern, wie unten gezeigt:

Dann lassen Sie einfach den Prozessmonitor laufen und tun Sie, was immer Sie tun, um den Prozess, den Sie protokollieren möchten, zum Laufen zu bringen. Sie können entweder in der Spalte “Detail” oder in der Spalte “Befehlszeile” (je nachdem, wie Sie diese konfigurieren) die Befehlszeilenargumente sehen. Zum Beispiel:

Natürlich können Sie auf diese Weise viel mehr verwandte Informationen extrahieren, wie z.B. welches das Arbeitsverzeichnis ist, welche Umgebungsvariablen an den Prozess übergeben wurden, usw… Außerdem ist es einfach, die Ergebnisse in eine Datei zu exportieren.

1
1
1
2014-04-07 15:07:04 +0000

Wenn ich mit CygWin einen Python-Prozess starte, ist dies ein Beispiel für die Befehlszeile:

c:\CygWin\bin\python2.7.exe /usr/local/bin/sudoserver.py

Aber Process Explorer sieht nur die Haupt-Exe:

C:\>tasklist | find "python" /i
python2.7.exe 5740 Console 1 15.312 KB

(beachten Sie die “Pfad: [Fehler beim Öffnen des Prozesses]” (siehe EDIT-1)). Gleiche Ergebnisse für tasklist:

Luis@Kenobi /cygdrive/c/
$ pgrep -f -l server.py
5740 /usr/bin/python2.7 /usr/local/bin/sudoserver.py

Der einzige Trick, den ich bis jetzt kenne, ist also das Auffinden über die CygWin Bash-Shell pgrep:

Es ist nützlich, dies zu wissen, solange CygWin ohne Probleme unter Windows zusammenarbeitet, und Sie können damit viele POSIX- und Python-Programme ausführen.

EDIT: Unter Windows scheinen Sie für die Taskliste keine Administratorrechte zu benötigen. In CygWin braucht man sie, um den Prozess eines Administrators sehen zu können (was mir logischer erscheint: die volle Kommandozeile könnte einige Parameter wie Passwörter enthalten), also müssen wir die CygWin Bash im elevated Administrator-Modus ausführen.

EDIT-1: Dieses Problem tritt nicht auf, wenn Sie den Process Explorer als Administrator ausführen. Danke für den Hinweis, @Pacerier.

-3
-3
-3
2012-11-02 04:46:45 +0000

gehen Sie zu run oder gehen Sie zu start und suchen Sie:

tasklist -m

tasklist -svc