2009-03-09 66 views
8

私はStartInfoにユーザー名、ドメイン、およびパスワードを提供するWindowsフォームアプリケーションがあり、そしてそれは、このスロー:.NETプロセスの開始プロセスエラー(ハンドルが無効です)

System.ComponentModelを。 Win32Exception:ハンドルがSystem.Diagnostics.Process.StartでSystem.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) (で 無効です)

私は資格情報が現在のユーザーにデフォルト設定することができたとき、私はそのようなを取得していませんエラーが発生し、プロセスが開始されると、資格情報を使用する必要がない程度まで機能します(クレジットはn MSBuildスクリプトでドライブをマッピングするためのecessary)。

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

それは私が悪いPSWを提供する場合、例えば、それはそれをキャッチするので、ユーザ/ PSWは、一致していないということではありません。ここでは、開始情報を埋めるコードです。したがって、この「無効なハンドル」は、信用証明書が渡された後に起こっています。私が何を省略したり、犯したりしているのかについてのアイデアはありますか?

答えて

19

入力、エラー、および出力をリダイレクトする必要があります。例えば

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

は、Microsoftは、 "入力をリダイレクトすることができません。" エラーが読み取るべきであると述べています(リンクがあったが、もはや働いていない)

+0

うわー、はい。私はすでにRedirectStandardOutputをtrueに設定していましたが、他の2つのリダイレクトは設定していませんでした。私は他の2つを真に設定し、それを修正しました!ありがとう、@Chris Lively !! – Cyberherbalist

+0

ありがとう、そのエラーメッセージでかなり混乱していた。 – Cwoo

+0

これに感謝します。私はこれを楽しみました。 –

関連する問題