2009-12-15 117 views
2

我有一個控制檯應用程序和一個雙贏的形式應用程序,都需要調出了一些數據的遠程服務器上,他們提出了一個調用膩子的命令行部分砰砰.exe,通過SSH運行遠程命令。Process.WaitForExit()在控制檯VS Windows窗體

我創建了兩個微小的類庫共享,運行以下:

public static string RunCommand(string command, string arguments) { 
    ProcessStartInfo startInfo = new ProcessStartInfo { 
     FileName = command, 
     Arguments = arguments, 
     UseShellExecute = false, 
     CreateNoWindow = true, 
     RedirectStandardOutput = true 
    }; 
    string output = null; 
    using (Process p = new Process()) { 
     p.StartInfo = processStartInfo; 
     p.Start(); 
     output = p.StandardOutput.ReadToEnd(); 
     p.WaitForExit(); 
    } 
    return output; 
} 

在控制檯應用程序一切正常,贏下形成不出錯,似乎WaitForExit()只是不等。我得到一個空字符串輸出。我已經從遠程服務器確認用戶已經登錄,所以看起來命令已經運行。

任何想法?

+0

你的函數在哪裏被調用? – 2009-12-15 21:42:48

+0

我在Program.Main()和主窗體的ctor中都嘗試了相同的結果。 – Gavin 2009-12-15 21:57:20

+2

考慮閱讀'p.StandardError' - 即使只是要確保命令確實按照您的預期完成了。 – 2009-12-15 22:00:38

回答

5

在Windows控制檯下,應用程序具有STDIN,STDOUT和STDERR。窗口化的應用程序不。在Console應用程序下創建進程時,STDIN等由子應用程序繼承。這在Windowed應用程序中不會發生。

RedirectStandardInput=true的作品,因爲它使系統創建標準輸入,你可以用發送輸入到子處理的作家。在你的情況下,孩子不需要輸入它只需要輸入的存在。因人而異。

相關問題