我正在尝试使用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
来访问它。我想在我的程序中复制这个动作。
答案 0 :(得分:2)
您的代码中有许多错误:
plink
;输入" plink
到cmd.exe
是疯了。您可以直接运行plink
,完全避免cmd.exe
(即使您需要使用cmd.exe
,也应该在命令行上将plink.exe
传递给它/c path\plink.exe
:{{ 1}})。不,直接运行不会导致Plink 立即关闭。WaitForExit()
而不读取重定向的输出将使代码死锁。请参阅ProcessStartInfo.RedirectStandardOutput
的备注部分。或者,使用process.StandardOutput.ReadToEnd()
(它类似于WaitForExit
,但也会读取输出)。它实际上是MSDN在上一个链接中推荐的内容。如果你打算只使用Plink执行一个命令,那么最好在Plink命令行上传递命令,而不是"输入"它到(重定向)输入:
plink.exe -ssh user@host command