C#equivalente a fork()/exec()
.net process (3)
Puede usar la clase Process para iniciar procesos externos. Le permitirá iniciar programas arbitrarios
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
Estoy desarrollando un programa que necesita llamar a un programa externo, pero necesita esperar a que se ejecute. Esto se está haciendo en C # (para el cual soy nuevo, pero tengo mucha experiencia en C ++, Qt y C) y CreateProcess no parece ser lo que estoy buscando (inicia el proceso, luego lo olvida, No necesito).
Este es uno de mis primeros proyectos de Windows (o al menos, solo Windows y definitivamente solo .NET) y estoy mucho más acostumbrado a hacer este tipo de cosas para * nix donde usaría fork y luego ejecutó en el niño, luego espere a que el niño termine. Pero no tengo ni idea de dónde empezar a buscar hacer algo como esto.
Ah, y estoy bastante seguro de que estoy atrapado en .NET porque necesito acceso de lectura al registro para completar este proyecto y el acceso al registro de .NET es absolutamente increíble (en mi opinión, no tengo nada para compararlo con )
Gracias.
Puedes usar la clase Process
. Le permite especificar algunas opciones sobre cómo desea ejecutarlo, y también proporciona un método que espera que el proceso se cierre antes de ejecutar la siguiente instrucción.
mira este enlace (la referencia msdn): http://msdn.microsoft.com/fr-fr/library/system.diagnostics.process.aspx
Básicamente lo que puedes hacer es:
Process p;
// some code to initialize it, like p = startProcessWithoutOutput(path, args, true);
p.WaitForExit();
un ejemplo de inicialización del proceso (es solo un código que utilicé alguna vez en algún lugar):
private Process startProcessWithOutput(string command, string args, bool showWindow)
{
Process p = new Process();
p.StartInfo = new ProcessStartInfo(command, args);
p.StartInfo.RedirectStandardOutput = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = !showWindow;
p.ErrorDataReceived += (s, a) => addLogLine(a.Data);
p.Start();
p.BeginErrorReadLine();
return p;
}
como puede ver en este código, también puede hacer una redirección de salida, redirección de error ... Si busca en la clase, creo que encontrará rápidamente lo que necesita.
var p = System.Diagnostics.Process.Start("notepad");
p.WaitForExit();