c# - soporta - ¿Mi proceso está en espera de entrada?
optimizar consultas sql server (2)
Estoy usando la clase de proceso para ejecutar un exe.
El exe es una aplicación de consola de terceros que no controlo.
Deseo saber si el proceso está esperando una entrada en la línea de comandos.
Si hace alguna diferencia, tengo la intención de eliminar la aplicación en caso de que esté esperando una entrada.
Hay eventos adecuados para cuando hay salida del programa en espera de ser leído, pero no puedo ver nada similar para cuando el proceso está esperando pacientemente la entrada.
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "myapp.exe";
info.CreateNoWindow = true;
info.UseShellExecute = false;
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
process.StartInfo = info;
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
¿Cómo detecto que mi proceso está en espera de entrada?
Dependiendo de lo que esté haciendo exactamente el proceso de terceros, podría intentar sondear los estados de sus hilos:
foreach(ProcessThread thread in process.Threads)
if (thread.ThreadState == ThreadState.Wait
&& thread.WaitReason == ThreadWaitReason.UserRequest)
process.Kill();
En su defecto ... puedes intentar
process.StandardInput.Close();
después de llamar a Inicio (), supongo que se generará una excepción en el proceso secundario si se intenta leer desde una entrada estándar.
Si la aplicación de consola tiene algún tipo de solicitud de entrada en espera, puede analizar periódicamente el texto de salida de la consola utilizando la propiedad Process.StandardOutput del proceso y esperar a que aparezca dicha solicitud. Una vez que se detecta la cadena correcta, sabes que está esperando la entrada. Consulte http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx .