Je cherche un outil ou une méthode pour savoir quels paramètres de ligne de commande ont été passés à un programme, par exemple lorsqu'il a été exécuté par un autre programme (scénario lanceur-application).
Vous pouvez le faire en utilisant Process Explorer .
Passez simplement votre souris sur un processus pour voir les arguments en ligne de commande utilisés pour le démarrer:
Vous pouvez également ouvrir les propriétés properties du processus et inspecter la ligne de commande à cet endroit:
Vous pouvez également le faire sans Process Explorer, à l'aide du service WMI de Windows. Exécutez ce qui suit à partir de l'invite de commande:
WMIC path win32_process get Caption,Processid,Commandline
Si vous voulez vider la sortie dans un fichier (cela facilite la lecture), utilisez le commutateur/OUTPUT:
WMIC /OUTPUT:C:\Process.txt path win32_process get Caption,Processid,Commandline
On peut aussi y arriver en utilisant Task Manager .
Ouvrez le gestionnaire de tâches (par CTRL-SHIFT-ESC, CTRL-ALT-DELETE ou toute autre méthode).
Pour Windows 7 (et probablement Windows XP):
Pour Windows 8:
Une colonne de lignes de commande de sera ajoutée aux colonnes actuellement affichées.
PowerShell à la rescousse.
Trouver:
Get-WmiObject Win32_Process -Filter "name = 'Perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\Perl\bin\Perl.exe" t/Server_PreFork.t'}
Et tuez en 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 }
Vous pouvez l'exécuter directement depuis powershell ou depuis un ps1 si votre système est configuré. Je détaille la configuration du script sans restriction sur je tue des zombies avec powershell ainsi que d'autres astuces de powershell ...
Les réponses précédentes sont excellentes dans le cas où le processus est déjà en cours et ne se terminera pas de si tôt. Cependant, si vous avez besoin (comme je l'ai fait) de le faire peut-être avec des processus qui démarrent plusieurs fois et/ou se terminent rapidement, ou peut-être enregistrez des événements sur une période plus longue, il existe un moyen de le faire en utilisant Process Monitor .
Fondamentalement, il enregistre divers événements dans le système. Dans ce cas, il suffit de filtrer l'événement "Process Start" et le nom du processus à surveiller, comme indiqué ci-dessous:
Ensuite, laissez simplement le moniteur de processus en cours d'exécution et faites ce que vous faites pour que le processus que vous souhaitez journaliser soit exécuté. Vous pouvez voir dans la colonne "Détails" ou la colonne "Ligne de commande" (dépend de la façon dont vous les configurez) les arguments de la ligne de commande. Par exemple:
Bien entendu, vous pouvez extraire beaucoup plus d'informations connexes telles que le répertoire de travail, les variables d'environnement transmises au processus, etc. Il est également facile d'exporter les résultats dans un fichier.
Lorsque vous utilisez CygWin , si je lance un processus Python , il s'agit d'un exemple de ligne de commande:
c:\CygWin\bin\python2.7.exe /usr/local/bin/sudoserver.py
Mais Process Explorer ne voit que l'exe principal:
(notez le "chemin: [message d'ouverture du processus d'erreur]" (voir EDIT-1)). Même résultat pour tasklist
:
C:\>tasklist | find "python" /i
python2.7.exe 5740 Console 1 15.312 KB
Donc, le seul truc que je connaisse jusqu'à maintenant, c'est de le trouver via CygWin Bash Shell pgrep
:
Luis@Kenobi /cygdrive/c/
$ pgrep -f -l server.py
5740 /usr/bin/python2.7 /usr/local/bin/sudoserver.py
Il est utile de le savoir, tant que CygWin cohabite sans problème dans Windows et que vous pouvez l’utiliser pour exécuter de nombreux programmes POSIX et Python.
EDIT: Sous Windows, vous ne semblez pas avoir besoin de privilèges d’administrateur pour la liste de tâches. Dans CygWin, vous en aurez besoin pour pouvoir voir le processus d’un administrateur (ce qui me semble plus logique: la ligne de commande complète peut avoir certains paramètres comme les mots de passe à l’intérieur), nous devons donc exécuter le CygWin Bash dans elevated Mode Administrateur .
EDIT-1: Ce problème ne se produira pas si vous exécutez Process Explorer en tant qu'administrateur. Merci de nous avoir signalé, @Pacerier.