2009-03-09 6 views
8

Ich habe eine Windows Form-Anwendung, die die Benutzername, Domäne und Passwort an die Startinfo, und es wirft dies liefert:.NET Prozessfehler Prozess startet mit Anmeldeinformationen (das Handle ist ungültig)

System.ComponentModel. Win32Exception: Das Handle ist ungültig bei System.Diagnostics.Process.StartWithCreateProcess (Processstartinfo) bei System.Diagnostics.Process.Start()

Wenn ich die Anmeldeinformationen erlauben den aktuellen Benutzer auf die Standard erhalte ich keine solche Fehler, und der Prozess, den ich beginne funktioniert in dem Maße, dass es keine Anmeldeinformationen verwenden muss (die Kredits sind n notwendig, um ein Laufwerk in einem MSBuild-Skript zu mappen). Hier ist der Code, der die Startinfo füllt:

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

Es ist nicht, dass der Benutzer/PSW ist nicht passend, denn wenn ich einen schlechten PSW aus, zum Beispiel, es es fängt. Also passiert diese "ungültige Handle" -Ding, nachdem das Cred übergeben wurde. Irgendwelche Ideen, was ich weglassen oder vermasseln könnte?

Antwort

19

Sie müssen Ihre Eingabe, Fehler und Ausgabe umleiten.

zum Beispiel: "Unfähig Eingang zu umleiten"

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

Auch sollte Microsoft sagte, hat der Fehler lesen, (verwendet, um einen Link zu haben, aber das hat nicht mehr funktioniert)

+0

Wow, ja. Ich habe RedirectStandardOutput bereits auf "True" gesetzt, aber nicht auf die beiden anderen Redirects. Ich setzte die anderen beiden auf wahr und das reparierte es! Danke, @Chris Lebhaft !! – Cyberherbalist

+0

Danke, wurde durch diese Fehlermeldung ziemlich verwirrt. – Cwoo

+0

Prost für das - Ich hatte Spaß mit diesem. –

Verwandte Themen