Git Tire del file por lotes con un usuario diferente

Tengo un usuario, llamémoslo "Mi usuario". Tiene una contraseña, supongamos que es "Contraseña". Este usuario tiene una key SSH para git. Intento ejecutar desde mi aplicación ASP.NET un file por lotes que emite commands git, es en una location que se pasa como un parámetro. Mi function es la siguiente:

private void ExecuteCommand(string path, int timeout) { Process process = new Process(); process.StartInfo = new ProcessStartInfo(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = "\"" + path + "\""; process.StartInfo.CreateNoWindow = true; process.StartInfo.UseShellExecute = false; //processInfo.WorkingDirectory = Config.GitHubRepoPath; process.StartInfo.UserName = "MyUser"; process.StartInfo.Password = new System.Security.SecureString(); process.StartInfo.Password.AppendChar('P'); process.StartInfo.Password.AppendChar('a'); process.StartInfo.Password.AppendChar('s'); process.StartInfo.Password.AppendChar('s'); process.StartInfo.Password.AppendChar('w'); process.StartInfo.Password.AppendChar('o'); process.StartInfo.Password.AppendChar('r'); process.StartInfo.Password.AppendChar('d'); // *** Redirect the output *** process.StartInfo.RedirectStandardError = true; process.StartInfo.RedirectStandardOutput = true; process.Start(); // *** Read the streams *** string output = process.StandardOutput.ReadToEnd(); string error = process.StandardError.ReadToEnd(); if (timeout <= 0) { process.WaitForExit(); } else { process.WaitForExit(timeout); } int exitCode = process.ExitCode; process.Close(); return new ShellCommandReturn { Error = error, ExitCode = exitCode, Output = output }; } 

Pero cuando ejecuto esta function, ExitCode es -1073741502 y el error y la salida están vacíos. ¿Cómo puedo solucionar este comportamiento?

Por favor, ayúdenme, he tratado de resolver esto literalmente por días.

Creo que networkingirigir tanto el error estándar como la salida estándar e intenta consumir de forma sincronizada es incorrecto. Consulte este enlace: http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.networkingirectstandardoutput%28v=vs.100%29.aspx

Permítame copyr un extracto:

Se produce una condición de interlocking si el process principal llama a p.StandardOutput.ReadToEnd seguido de p.StandardError.ReadToEnd y el process secundario escribe suficiente text para completar su secuencia de error. El process principal esperaría indefinidamente para que el process hijo cierre su flujo StandardOutput. El process secundario esperaría indefinidamente para que el padre lea de la secuencia StandardError completa.

La otra cosa es … cuando invocas una instancia de cmd.exe, intenta agregar un argumento "/ c" también.