gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:05 26 4
gpt4 key购买 nike

我正在尝试使用 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 来访问它。我想在我的程序中复制这个 Action 。

最佳答案

你的代码有很多错误:

  • 您正在重定向输出,而不是读取/处理/打印它(这就是为什么“没有显示任何内容”)
  • 通过“键入”plinkcmd.exe 来运行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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com