it-swarm.com.de

Wie finde ich Befehlszeilenargumente eines laufenden Programms heraus?

Ich suche nach einem Tool oder einer Methode, um herauszufinden, welche Befehlszeilenparameter an ein Programm übergeben wurden, zum Beispiel, als es von einem anderen Programm ausgeführt wurde (Starter-Anwendungsszenario).

78
Gepard

Sie können dies mit Process Explorer tun.

Bewegen Sie den Mauszeiger einfach über einen Prozess, um die zum Starten verwendeten Befehlszeilenargumente anzuzeigen:
enter image description here

Alternativ können Sie die Eigenschaften des Prozesses öffnen und die Befehlszeile genau dort überprüfen:
enter image description here

70
Der Hochstapler

Sie können dies auch ohne Process Explorer mit dem WMI-Dienst von Windows tun. Führen Sie an der Eingabeaufforderung Folgendes aus:

WMIC path win32_process get Caption,Processid,Commandline

Wenn Sie die Ausgabe in eine Datei sichern möchten (um das Lesen zu erleichtern), verwenden Sie die Option/OUTPUT:

WMIC /OUTPUT:C:\Process.txt path win32_process get Caption,Processid,Commandline
84
Andy E

Das kann man auch mit Task Manager erreichen.

Öffnen Sie den Task-Manager (mit STRG-UMSCHALT-ESC, STRG-ALT-ENTF oder einer anderen Methode).

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

  • Gehen Sie zur Registerkarte "Prozesse". Wählen Sie im Menü "Ansicht" die Option "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.)

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 mit Befehlszeilen von wird zu den aktuell angezeigten Spalten hinzugefügt.

34
Jeromy Adofo

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öte 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 von Powershell direkt oder von einem PS1 ausführen, wenn Sie Ihr System-Setup haben. Ich beschreibe das uneingeschränkte Skript-Setup von Ich töte Zombies mit Powershell und anderen Powershell-Tricks ...

5
Dave Horner

Vorherige Antworten sind für den Fall hilfreich, dass der Prozess bereits ausgeführt wird und nicht bald abgebrochen wird. Wenn Sie dies jedoch tun müssen (wie ich), möglicherweise mit Prozessen, die mehrmals gestartet und/oder schnell beendet wurden, oder Ereignisse in einem längeren Zeitraum protokollieren, gibt es eine Möglichkeit, dies mit Process Monitor zu tun .

Grundsätzlich werden verschiedene Ereignisse im System protokolliert. In diesem Fall können Sie einfach das Ereignis "Prozessstart" und den Namen des zu überwachenden Prozesses filtern, wie unten gezeigt:

 enter image description here

Lassen Sie dann einfach den Prozessmonitor laufen und tun Sie alles, 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" (abhängig davon, wie Sie diese konfigurieren) die Befehlszeilenargumente sehen. Zum Beispiel:

 enter image description here

Natürlich können Sie auf diese Weise viel mehr verwandte Informationen wie das Arbeitsverzeichnis, die übergebenen Umgebungsvariablen usw. extrahieren. Außerdem ist es einfach, die Ergebnisse in eine Datei zu exportieren.

4
Sil

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

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

Aber Process Explorer sieht nur die Haupt-Exe:

Process Explorer not detecting full command line of Python process

(Beachten Sie den "Pfad: [Fehler beim Öffnen der Prozessmeldung]" (siehe EDIT-1)). Gleiche Ergebnisse für tasklist:

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

Der einzige Trick, den ich bisher kenne, ist, ihn über CygWin Bash Shell pgrep zu finden:

[email protected] /cygdrive/c/
$ pgrep -f -l server.py
5740 /usr/bin/python2.7 /usr/local/bin/sudoserver.py

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

BEARBEITEN: In Windows scheinen Sie keine Administratorrechte für die Jobliste zu benötigen. In CygWin benötigen Sie sie, um den Prozess eines Administrators anzeigen zu können (was mir logischer erscheint: Die vollständige Befehlszeile könnte einige Parameter wie Passwörter enthalten), also müssen wir das ausführen. CygWin Bash im erhöhten Administratormodus .

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