我尝试从 C# 应用程序启动 plink.exe
(PuTTY Link,命令行实用程序/PuTTY 版本)以建立 SSH 反向隧道,但它不再起作用只要我传递了正确的参数。
这是什么意思?以下按预期工作:它打开一个命令行窗口,显示我忘记为 -pw
参数退出传递密码,并显示提示。我知道它得到了论据,因为它特别要求我没有提供的一件事。
Uri uri = omitted;
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd";
info.Arguments = "/k \"C:\\Program Files (x86)\\PuTTY\\plink.exe\" -R 3389:" + uri.Host + ":" + uri.Port + " -N -l username -pw"; // TODO pwd
Process p = Process.Start(info);
我尝试了同样的想法,直接调用 plink.exe
而不是 cmd.exe/k
,但是窗口会立即关闭,这对于寻找错误来说是不幸的。
但是当我在参数中传递密码时,plink.exe
显示程序帮助(显示可用参数)并退出:
Uri uri = omitted;
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd";
info.Arguments = "/k \"C:\\Program Files (x86)\\PuTTY\\plink.exe\" -R 3389:" + uri.Host + ":" + uri.Port + " -N -l username -pw secretpassword";
Process p = Process.Start(info);
没有缺少参数的指示。 cmd/k
和 plink.exe
变体都不起作用(后者会立即关闭,因此没有关于不同行为的信息)。
当我使用相同的参数从 Windows 7 开始菜单启动器启动应用程序时,它会打开一个 cmd.exe
窗口并按要求建立连接。
怎么了?有没有办法 plink.exe
注意到它没有在真正的 shell 中运行?如果是,我该如何规避它,就像开始菜单“提示”一样?
我希望这个问题在 SO 上是正确的,因为它虽然专门针对单个应用程序,但围绕以编程方式成功启动它为中心。
最佳答案
是的,this web page表明 Putty 对非交互式登录感到不安。如果建议的解决方法没有帮助,我建议您在 Putty 支持论坛或 Superuser.com 上提出相关问题。它与 Process 类或 C# 语言无关。
关于c# - 根据参数,以编程方式启动 CLI 应用程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2865204/