c# - 在 C# 中捕获 Plink 输出

标签 c# io putty plink

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

另请参阅 Testing using Plink.exe to connect to SSH in C# 的答复

关于c# - 在 C# 中捕获 Plink 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28093180/

相关文章:

c# - 推荐学习C#和设计模式的开源软件(MVC等)

c# - 为什么对waveOutGetPosition的调用挂起?

vim - 将 xterm 中运行的 Vim 7.2 中的文本复制到 Windows 剪贴板

unix - 如何用putty维护Session?

java - Java.Random.IO 中的 ReadLong 和 WriteLong 方法

linux - 在 PowerShell 中 plink 以在 Linux 机器 (SuSE) 上运行命令

c# - 如何查看 Parallel.ForEach 循环中引发的线程数?

c# - 如何在不知道Key值的情况下读取Json数据

java - 不完整的 java.net.URL.openStream() 流

java - 我的 .txt 文件位置应该在哪里?