2009-03-09 9 views
8

Ho un'applicazione Windows Form che fornisce il nome utente, dominio e password al StartInfo, e getta in questo modo:.NET Errore di processo di avvio del processo utilizzando le credenziali (l'handle non valido)

System.ComponentModel. Win32Exception: l'handle non valido a System.Diagnostics.Process.StartWithCreateProcess (ProcessStartInfo startInfo) a System.Diagnostics.Process.Start()

Quando mi permetto le credenziali da utilizzare come predefinito dell'utente corrente ottengo tale errore, e il processo che inizio funziona nella misura in cui non è necessario utilizzare le credenziali (i crediti sono n ecessary per mappare un'unità in uno script MSBuild). Ecco il codice che riempie le informazioni di partenza:

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(); 

Non è che l'utente/PSW non corrisponde, perché quando mi forniscono un cattivo PSW, per esempio, la prende. Quindi, questa cosa "handle invalido" sta accadendo dopo che il cred è passato. Qualche idea su cosa potrei omettere o rovinare?

risposta

19

Devi reindirizzare Input, Error e Output.

per esempio: "Non è possibile reindirizzare input"

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); 
} 

Anche Microsoft ha detto che l'errore dovrebbe leggere, (usato per avere un collegamento, ma che non funzionava più)

+0

Wow, sì. Stavo già impostando RedirectStandardOutput su true ma non sugli altri due reindirizzamenti. Ho impostato gli altri due su true e l'ho risolto! Grazie, @Chris Lively !! – Cyberherbalist

+0

Grazie, stava diventando piuttosto confuso da quel messaggio di errore. – Cwoo

+0

Cheers per questo - Mi sono divertito con questo. –

Problemi correlati