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

Hoe kom ik achter de commandoregel argumenten van een draaiend programma?

Ik ben op zoek naar een tool of methode om te achterhalen welke command line parameters zijn doorgegeven aan een programma, bijvoorbeeld wanneer het werd uitgevoerd door een ander programma (launcher-applicatie scenario).

Antwoorden (7)

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

U kunt het ook doen zonder Process Explorer, met behulp van de WMI-service van Windows. Voer het volgende uit vanaf de opdrachtprompt:

WMIC path win32_process get Caption,Processid,Commandline

Als je de uitvoer naar een bestand wilt dumpen (maakt het wat gemakkelijker te lezen), gebruik dan de /OUTPUT-schakelaar:

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

U kunt dat doen met Process Explorer .

Ga gewoon met je muis over een proces om de commando-regel argumenten te zien die gebruikt zijn om het te starten:

Als alternatief kun je de eigenschappen van het proces openen en de commandoregel daar bekijken:

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

Men kan dat ook bereiken door Taakbeheer te gebruiken.

Open Taakbeheer (met CTRL-SHIFT-ESC, CTRL-ALT-DELETE of een andere methode).

Voor Windows 7 (en waarschijnlijk ook Windows XP):

  • Ga naar het tabblad “Processen”. Kies in het menu “Beeld” de optie “Kolommen selecteren…”.
  • Vink het vakje “Command Line” aan en klik op OK. (Je moet misschien naar beneden scrollen om het te vinden)

Voor Windows 8:

  • Ga naar het tabblad “Details”. Klik met de rechtermuisknop op een van de kolommen (bijv. Namen, PID enz.) en selecteer “Kolommen selecteren”.
  • Vink het vakje “Command Line” aan en klik op OK. (Misschien moet u naar beneden scrollen om het te vinden)

Er wordt een kolom met Commandoregels toegevoegd aan de momenteel weergegeven kolommen.

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

PowerShell biedt redding.

Zoek:

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

En dood 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 }

Je kunt het direct vanuit powershell draaien of vanuit een ps1 als je je systeem hebt ingesteld. Ik beschrijf de setup van onbeperkte scripts op ik dood zombies met powershell evenals andere powershell trucs…

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

Vorige antwoorden zijn geweldig in het geval het proces al loopt en is niet van plan om snel te beëindigen. Als je echter (zoals ik) dit misschien moet doen met processen die meerdere keren opstarten en/of snel worden beëindigd, of misschien voorvallen in een langere periode wilt loggen, is er een manier om dit te doen met behulp van Process Monitor .

In principe logt het verschillende gebeurtenissen in het systeem, in dit geval kunnen we gewoon filteren op de “Proces Start” gebeurtenis en de naam van het proces dat we willen monitoren, zoals hieronder getoond:

Dan laat je gewoon de proces monitor lopen en doe je wat je ook doet om het proces dat je wilt loggen aan de gang te krijgen. Je kunt in de kolom “Detail” of de kolom “Command line” (afhankelijk van hoe je die hebt geconfigureerd) de command line argumenten zien. Bijvoorbeeld:

Natuurlijk kun je op deze manier veel meer gerelateerde informatie ophalen, zoals wat de werkdirectory is, welke omgevingsvariabelen aan het proces zijn doorgegeven, enz… Het is ook gemakkelijk om de resultaten te exporteren naar een bestand.

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

Als ik CygWin gebruik en ik start een Python proces, dan is dit een voorbeeld van de commandoregel:

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

Maar Process Explorer ziet alleen de hoofd exe:

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

(let op het “path: [Fout bij openen procesbericht]” (zie EDIT-1)). Dezelfde resultaten voor tasklist:

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

Dus, de enige truc die ik tot nu toe ken, is het vinden via CygWin Bash shell pgrep:

Het is nuttig om dit te weten, zolang CygWin zonder problemen samenwerkt in Windows, en je het kunt gebruiken om veel POSIX en Python programma’s te draaien.

EDIT: In Windows schijn je geen administrator rechten nodig te hebben voor tasklist. In CygWin heb je ze nodig om het proces van een administrator te kunnen bekijken (wat me logischer lijkt: de volledige command-line zou sommige parameters zoals wachtwoorden kunnen bevatten), dus we moeten de CygWin Bash in elevated Administrator Mode draaien.

EDIT-1: Dit probleem zal zich niet voordoen als u Process Explorer als administrator uitvoert. Bedankt voor het wijzen, @Pacerier.

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

ga naar run of ga naar start en zoek:

tasklist -m

tasklist -svc