¿Puedo iniciar un proceso (usando C# Process.Start()
) en la misma consola que el programa de llamada? De esta forma, no se creará una nueva ventana y la entrada/salida/error estándar será la misma que la aplicación de la consola de llamadas. Intenté configurar process.StartInfo.CreateNoWindow = true;
pero el proceso aún comienza en una nueva ventana (y se cierra inmediatamente después de que termine).Iniciar un proceso en la misma consola
Respuesta
No deberías No es necesario hacer nada que no sea el conjunto UseShellExecute = false
, ya que el comportamiento predeterminado de la función Win32 CreateProcess es que una aplicación de consola herede la consola principal, a menos que especifique CREATE_NEW_CONSOLE bandera.
He probado el siguiente programa:
private static void Main()
{
Console.WriteLine("Hello");
var p = new Process();
p.StartInfo = new ProcessStartInfo(@"c:\windows\system32\netstat.exe", "-n")
{
UseShellExecute = false
};
p.Start();
p.WaitForExit();
Console.WriteLine("World");
Console.ReadLine();
}
y me dio este resultado:
Usted podría intentar redirigir la salida de este proceso y luego imprimirlo en la consola proceso de llamada:
public class Program
{
static void Main()
{
var psi = new ProcessStartInfo
{
FileName = @"c:\windows\system32\netstat.exe",
Arguments = "-n",
RedirectStandardOutput = true,
UseShellExecute = false
};
var process = Process.Start(psi);
while (!process.HasExited)
{
Thread.Sleep(100);
}
Console.WriteLine(process.StandardOutput.ReadToEnd());
}
}
enfoque alternativo utilizando el evento Exited
y un mango de espera:
static void Main()
{
using (Process p = new Process())
{
p.StartInfo = new ProcessStartInfo
{
FileName = @"netstat.exe",
Arguments = "-n",
RedirectStandardOutput = true,
UseShellExecute = false
};
p.EnableRaisingEvents = true;
using (ManualResetEvent mre = new ManualResetEvent(false))
{
p.Exited += (s, e) => mre.Set();
p.Start();
mre.WaitOne();
}
Console.WriteLine(p.StandardOutput.ReadToEnd());
}
}
alguna razón en particular para recorrer con 'Thread.Sleep' en lugar de escuchar a' Proceso. Salió' y sincronizar con un identificador de espera en su lugar? –
No, no hay un motivo en particular, solo es perezoso, no dude en editar mi respuesta para reflejar esta excelente sugerencia. –
O simplemente podría usar 'Process.WaitForExit' :) –
- 1. Cómo iniciar un proceso basado en la consola y aplicar un título personalizado mediante Powershell
- 2. Cómo iniciar un proceso en la misma carpeta que el ejecutable
- 3. Iniciar un proceso por separado
- 4. java.util.logging para iniciar sesión en la consola
- 5. Cómo iniciar un proceso detenido en Linux
- 6. Cómo iniciar el proceso oculto?
- 7. Proceso de prueba. ¿Iniciar?
- 8. cscript - imprimir salida en la misma línea en la consola?
- 9. ¿Es posible UAC elevar un proceso sin iniciar otro proceso?
- 10. Iniciar un proceso con los parámetros
- 11. Iniciar un nuevo proceso y matar el proceso actual
- 12. Iniciar proceso no elevada de proceso elevada
- 13. Iniciar un proceso como LocalSystem usando ProcessStartInfo
- 14. ¿Cómo iniciar un proceso y pausarlo inmediatamente?
- 15. Cómo iniciar un proceso y hacerlo 'independiente'
- 16. Django: iniciar un proceso en un hilo de fondo?
- 17. Iniciar un nuevo proceso que ejecuta un delegado
- 18. ¿Cómo iniciar un proceso secundario en la misma sesión de depuración de Visual Studio como padre, programáticamente?
- 19. ¿Cómo puedo iniciar un segundo proceso de Java?
- 20. cómo iniciar un proceso en cierto tiempo en Java?
- 21. Deshabilitar la segunda consola vacía etiquetada [Consola de depuración] al iniciar un objetivo de depuración
- 22. ¿Cómo iniciar otro proceso en sandbox en Mac?
- 23. Iniciar proceso con administrador directamente en C#
- 24. Iniciar un proceso sin robar el foco (C#)
- 25. Cómo iniciar un proceso como modo de administrador en C#
- 26. Iniciar un proceso con credenciales de un servicio de Windows
- 27. Iniciar un proceso .Net como un usuario diferente
- 28. htaccess rule para reenviar/iniciar sesión/y/iniciar sesión en la misma página?
- 29. Iniciar varias aplicaciones de consola desde un archivo por lotes
- 30. Cómo redirigir a la misma página después de iniciar sesión
Funcionó maravillosamente, gracias. – ses011