我正在尝试使用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/

10-09 09:45