¿Cómo leer los argumentos de línea de comando de otro proceso en C #?

¿Cómo puedo obtener los argumentos de línea de comando de otro proceso?

Usando las funciones estáticas de la clase System.Diagnostics.Process , puedo obtener una lista de procesos en ejecución, por ejemplo, por nombre:

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

Sin embargo, no hay forma de acceder a la línea de comando utilizada para iniciar este proceso. ¿Cómo podría uno hacer eso?

Si no usó el método Start para iniciar un proceso, la propiedad StartInfo no refleja los parámetros utilizados para iniciar el proceso. Por ejemplo, si usa GetProcesses para obtener una matriz de procesos que se ejecutan en la computadora, la propiedad StartInfo de cada Proceso no contiene el nombre original o los argumentos utilizados para iniciar el proceso. (fuente: MSDN )

La sugerencia de WMI de Stuart es buena:

 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"]); 

Si tiene como objective Windows XP o una versión posterior y puede permitirse la sobrecarga de WMI, una posibilidad sería buscar el proceso objective utilizando la clase WIN32_Process de WMI, que tiene una propiedad CommandLine.

Process.StartInfo devuelve un objeto ProcessStartInfo que presuntamente pero no necesariamente tiene los argumentos en la propiedad Arguments.

¿Son ambos proyectos tuyos? ¿Podría modificar la fuente del proceso que está tratando de examinar para que le proporcione sus argumentos de línea de comandos, en lugar de intentar leerlos desde algún lugar fuera de ese proceso?