2014-12-21 25 views
1

我想用C#在PuTTY中运行Unix命令。我有下面的代码。但代码不起作用。我无法打开PuTTY。在C#中使用PuTTY运行Unix命令

static void Main(string[] args) 
{ 
    Process cmd = new Process(); 
    cmd.StartInfo.FileName = @"C:\Windows\System32\cmd"; 
    cmd.StartInfo.UseShellExecute = false; 
    cmd.StartInfo.RedirectStandardInput = false; 
    cmd.StartInfo.RedirectStandardOutput = true; 
    cmd.Start(); 
    cmd.StartInfo.Arguments = "C:\Users\win7\Desktop\putty.exe -ssh [email protected] 22 -pw mahi"; 
} 
+0

你已经走了有点不对劲有队友。看看http://stackoverflow.com/questions/6147203/automating-running-command-on-linux-from-windows-using-putty –

回答

2

这应该工作:

static void Main(string[] args) 
    { 
     ProcessStartInfo cmd = new ProcessStartInfo(); 
     cmd.FileName = @"C:\Users\win7\Desktop\putty.exe"; 
     cmd.UseShellExecute = false; 
     cmd.RedirectStandardInput = false; 
     cmd.RedirectStandardOutput = true; 
     cmd.Arguments = "-ssh [email protected] 22 -pw mahi"; 
     using (Process process = Process.Start(cmd)) 
     { 
      process.WaitForExit(); 
     } 
    } 
+0

尽管代码确实执行了PuTTY,但它是如何让您执行命令的? –

+1

如果你想运行命令,我建议使用一个SSH库,比如[SSH.NET](http://sshnet.codeplex.com/)和使用putty。 –

6
  • putty.exe是一个GUI应用程序。它旨在交互式使用,而不是自动化。尝试重定向其标准输出没有意义,因为它没有使用它。

  • 对于自动化,请使用PuTTY包中的另一个工具plink.exe
    这是一个控制台应用程序,因此您可以重定向其标准输出/输入。

  • 试图通过cmd.exe间接执行应用程序没有意义。直接执行。

  • 您还需要重定向标准输入,以便能够将命令提供给Plink。

  • 您必须在致电.Start()之前提供参数。

  • 您也可能想重定向错误输出(RedirectStandardError)。虽然请注意,您需要并行读取输出和错误输出,但代码复杂。


static void Main(string[] args) 
{ 
    Process cmd = new Process(); 
    cmd.StartInfo.FileName = @"C:\Program Files (x86)\PuTTY\plink.exe"; 
    cmd.StartInfo.UseShellExecute = false; 
    cmd.StartInfo.RedirectStandardInput = true; 
    cmd.StartInfo.RedirectStandardOutput = true; 
    cmd.StartInfo.Arguments = "-ssh [email protected] 22 -pw mahi"; 
    cmd.Start(); 
    cmd.StandardInput.WriteLine("./myscript.sh"); 
    cmd.StandardInput.WriteLine("exit"); 
    string output = cmd.StandardOutput.ReadToEnd(); 
} 
+0

@MartinPrikrylI有一个问题,如果我在Unix上运行这个命令'execute_unix_program('shell','sh $ ORF_SRC/anly_load_int.sh');'我将如何使用您的示例执行此操作?我想要做的就是从我的Windows应用程序exexute这个命令..我不知道使用'plink.exe'会工作..谢谢 – MethodMan

+0

你只需使用'sh $ ORF_SRC/anly_load_int.sh'而不是'。/myscript.sh'。 –

+0

所以我可以做以下'cmd.StandardInput.WriteLine(“./$ ORF_SRC/anly_load_int.sh”);'是正确的..?如果是这样,我会尝试它..感谢快速回应 – MethodMan