Estoy tratando de ejecutar un archivo por lotes, como otro usuario, desde mi aplicación web. Por alguna razón, ¡el archivo por lotes se cuelga! Puedo ver que "cmd.exe" se ejecuta en el administrador de tareas, pero permanece ahí para siempre, no se puede eliminar y el archivo por lotes no se está ejecutando. Aquí está mi código:C# .Net: ¿Por qué se cuelga mi Process.Start()?
SecureString password = new SecureString();
foreach (char c in "mypassword".ToCharArray())
password.AppendChar(c);
ProcessStartInfo psi = new ProcessStartInfo();
psi.WorkingDirectory = @"c:\build";
psi.FileName = Environment.SystemDirectory + @"\cmd.exe";
psi.Arguments = "/q /c build.cmd";
psi.UseShellExecute = false;
psi.UserName = "builder";
psi.Password = password;
Process.Start(psi);
Si no adivinar, este archivo por lotes se basa mi solicitud (una aplicación diferente a la que está ejecutando este comando).
El Process.Start (psi); la línea devuelve inmediatamente, como debería, pero el archivo por lotes simplemente parece bloquearse, sin ejecutar. ¿Algunas ideas?
EDIT: Consulte mi respuesta a continuación para conocer el contenido del archivo por lotes.
- El archivo output.txt nunca se crea.
que añaden estas líneas:
psi.RedirectStandardOutput = true;
Process p = Process.Start(psi);
String outp = p.StandardOutput.ReadLine();
y dio un paso a través de ellos en modo de depuración. El código se cuelga en el ReadLine()
. ¡Estoy perplejo!
¿Puedes publicar el código de tu archivo de proceso por lotes e intentar emitir ecos desde tu archivo por lotes para que veas que está comenzando? –