2009-12-15 136 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的作品,因为它使系统创建标准输入,你可以用发送输入到子处理的作家。在你的情况下,孩子不需要输入它只需要输入的存在。因人而异。