Error de proceso de inicio de proceso de .NET con credenciales (el identificador no es válido)

StackOverflow https://stackoverflow.com/questions/628191

  •  06-07-2019
  •  | 
  •  

Pregunta

Tengo una aplicación de Windows Form que proporciona el nombre de usuario, el dominio y la contraseña a StartInfo, y arroja esto:

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

Cuando permito que las credenciales sean predeterminadas para el usuario actual, no aparece ese error, y el proceso que inicio funciona en la medida en que no necesita usar credenciales (los créditos son necesarios para mapear una unidad en un script de MSBuild ) Aquí está el código que llena la información de inicio:

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 coincida, porque cuando proporciono un psw malo, por ejemplo, lo atrapa. Entonces, este " identificador inválido " Lo que está sucediendo después de que se pasa el crédito. ¿Alguna idea sobre lo que podría estar omitiendo o arruinando?

¿Fue útil?

Solución

Debe 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 debería leer, "No se puede redirigir la entrada". (solía tener un enlace, pero ya no funcionaba)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top