33 votes

Comment lire les arguments de la ligne de commande d'un autre processus en C# ?

Comment puis-je obtenir les arguments de ligne de commande d'un autre processus ?

L'utilisation des fonctions statiques de la System.Diagnostics.Process Je peux obtenir une liste des processus en cours, par exemple par leur nom :

Process[] processList = Process.GetProcessesByName(processName);

Cependant, il n'y a aucun moyen d'accéder à la ligne de commande utilisée pour lancer ce processus. Comment pourrait-on le faire ?

58voto

xcud Points 6878

Si vous n'avez pas utilisé la méthode Start pour démarrer un processus, la propriété StartInfo ne reflète pas les paramètres utilisés pour démarrer le processus. Par exemple, si vous utilisez GetProcesses pour obtenir un tableau des processus en cours d'exécution sur l'ordinateur, la propriété StartInfo de chaque processus ne contient pas le nom du fichier d'origine ou les arguments utilisés pour démarrer le processus. (source : MSDN )

La suggestion de Stuart concernant WMI est bonne :

string wmiQuery = string.Format("select CommandLine from Win32_Process where Name='{0}'", processName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
ManagementObjectCollection retObjectCollection = searcher.Get();
foreach (ManagementObject retObject in retObjectCollection)
    Console.WriteLine("[{0}]", retObject["CommandLine"]);

5voto

stuartd Points 22668

Si vous visez Windows XP ou une version ultérieure et que vous pouvez vous permettre de payer les frais généraux de WMI, une possibilité serait de rechercher le processus cible à l'aide de la commande Classe WIN32_Process qui a une propriété CommandLine.

0voto

plinth Points 26817

Process.StartInfo renvoie un ProcessStartInfo qui a prétendument mais pas nécessairement les arguments dans la propriété Arguments.

0voto

JMD Points 4784

Les deux projets sont de vous ? Pourriez-vous modifier les sources du processus que vous essayez d'examiner pour qu'il vous donne ses arguments en ligne de commande, plutôt que d'essayer de les lire à partir d'un endroit extérieur à ce processus ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X