我正在尝试使用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";
}
答案 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();
}
}