我正在尝试使用 Plink 访问计算机上的信息。我遵循了本教程:
http://www.mindfiresolutions.com/Creating-a-SSH-connection-using-plink-PuTTY-via-C-application-1760.ph
到目前为止,我仅使用我的程序来打开 Plink,一旦我至少可以让 Plink 在我的程序中打开,我将添加登录信息等。我根据教程有这个:
ProcessStartInfo psi = new ProcessStartInfo(@"C:\Windows\System32\cmd");
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
psi.UseShellExecute = false;
psi.CreateNoWindow = false;
Process process = Process.Start(psi);
Thread.Sleep(3000);
string cmdForTunnel = "plink";
process.StandardInput.WriteLine(cmdForTunnel);
process.WaitForExit();
Thread.Sleep(10000);
//DoBusinessLogic();
process.StandardInput.WriteLine("logout");
Thread.Sleep(10000);
if (process.HasExited)
{
process.Close();
process.Dispose();
}
但是什么也没有显示,这让我很烦恼。命令 plink
应该显示有关如何使用该程序的帮助信息(稍后我将用更有用的东西替换该命令),但命令提示符仍然为空。我还尝试用 ipconfig
替换 plink
,但也没有显示任何内容。
我知道如何自己打开 cmd 并输入 plink
来访问它。我想在我的程序中复制此操作。
最佳答案
您的代码中有很多错误:
- 您正在重定向输出,并且您没有读取/处理/打印它(这就是为什么“没有显示任何内容”)
- 通过在
cmd.exe
中“键入”plink
来运行plink
是疯狂的。您可以直接运行plink
,完全避免cmd.exe
(即使您需要使用cmd.exe
,您也应该通过>plink.exe
在命令行上添加到它:/c path\plink.exe
)。不,直接运行它不会导致 Plink 立即关闭。 - 在不读取重定向输出的情况下调用
WaitForExit()
会在输出缓冲区填满后导致代码死锁。请参阅ProcessStartInfo.RedirectStandardOutput
的备注部分。或者,使用process.StandardOutput.ReadToEnd()
(它类似于WaitForExit
,但也读取输出)。这实际上是 MSDN 在上一个链接中推荐的内容。 如果您只想使用 Plink 执行一个命令,最好在 Plink 命令行上传递该命令,而不是将其“键入”到其(重定向的)输入中:
plink.exe -ssh user@host command
关于c# - 在 C# 中捕获 Plink 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28093180/