在C#中使用PuTTY运行Unix命令

时间:2014-12-21 18:19:09

标签: c# putty

我正在尝试使用C#在PuTTY中运行Unix命令。我有以下代码。但是代码不起作用。我无法打开PuTTY。

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 mahi@192.168.37.129 22 -pw mahi";
}

2 个答案:

答案 0 :(得分:7)

  • 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 mahi@192.168.37.129 22 -pw mahi";
    cmd.Start();
    cmd.StandardInput.WriteLine("./myscript.sh");
    cmd.StandardInput.WriteLine("exit");
    string output = cmd.StandardOutput.ReadToEnd();
}

答案 1 :(得分: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 mahi@192.168.37.129 22 -pw mahi";
        using (Process process = Process.Start(cmd))
        {
            process.WaitForExit();
        }
    }