我正在尝试使用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
应该显示有关如何使用该程序的帮助信息(我将在以后用更有用的内容替换该命令),但是命令提示符仍然为空。我还通过用plink
替换ipconfig
进行了实验,该内容也没有显示。我知道如何自己打开cmd并键入
plink
来访问它。我想在我的程序中复制此操作。 最佳答案
您的代码中有很多错误:
您正在重定向输出,而不是读取/处理/打印输出(这就是“什么都不显示”的原因)
通过将plink
键入到plink
来运行cmd.exe
太疯狂了。您可以直接运行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
另请参见Testing using Plink.exe to connect to SSH in C#的答案
关于c# - 在C#中捕获Plink输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28093180/