2009-03-09 26 views
8

Tengo una aplicación de Windows Forms que suministra el nombre de usuario, dominio y contraseña a la StartInfo, y que arroja el siguiente:.NET Error de proceso del proceso de inicio utilizando credenciales (El identificador no es válido)

System.ComponentModel. Win32Exception: El identificador no es válido en System.Diagnostics.Process.StartWithCreateProcess (ProcessStartInfo startInfo) en System.Diagnostics.Process.Start()

Cuando dejo que las credenciales por defecto a usuario actual no consigo ninguna tales error, y el proceso que comienzo funciona en la medida en que no necesita usar credenciales (los creditos son n necesario para mapear una unidad en una secuencia de comandos MSBuild). Aquí está el código que llena la información de arranque:

Process p = new Process(); 
ProcessStartInfo si = new ProcessStartInfo(buildApp, buildArgs); 
si.WorkingDirectory = msBuildWorkingDir; 
si.UserName = txtUserName.Text; 
char[] psw = txtPassword.Text.ToCharArray(); 
SecureString ss = new SecureString(); 
for (int x = 0; x < psw.Length; x++) 
{ 
    ss.AppendChar(psw[x]); 
} 
si.Password = ss; 
si.Domain = "ABC"; 
si.RedirectStandardOutput = true; 
si.UseShellExecute = false; 
si.WorkingDirectory = txtWorkingDir.Text; 
p.StartInfo = si; 
p.Start(); 

No es que el usuario/PSW no coincide, porque cuando proporciono una mala PSW, por ejemplo, que lo atrapa. Entonces, esta cosa de "manejo inválido" está sucediendo después de que se pase la acreditación. ¿Alguna idea sobre lo que podría estar omitiendo o arruinando?

Respuesta

19

Tiene que redirigir su Entrada, Error y Salida.

por ejemplo:

ProcessStartInfo info = new ProcessStartInfo("cmd.exe"); 
info.UseShellExecute = false; 
info.RedirectStandardInput = true; 
info.RedirectStandardError = true; 
info.RedirectStandardOutput = true; 
info.UserName = dialog.User; 

using (Process install = Process.Start(info)) { 
     string output = install.StandardOutput.ReadToEnd(); 
     install.WaitForExit(); 
     // Do something with you output data  
    Console.WriteLine(output); 
} 

También Microsoft ha dicho que el error debe leer, "No se puede redirigir la entrada". (solía tener un enlace, pero que ya no funcionaba)

+0

Wow, sí. Ya estaba configurando RedirectStandardOutput en verdadero, pero no en los otros dos redireccionamientos. Puse los otros dos en verdadero y eso lo solucionó! Gracias, @Chris Lively !! – Cyberherbalist

+0

Gracias, estaba bastante confundido por ese mensaje de error. – Cwoo

+0

Saludos por esto. Me he divertido con esto. –

Cuestiones relacionadas