c# - 根据参数,以编程方式启动 CLI 应用程序不起作用

标签 c# .net putty processstartinfo

我尝试从 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/kplink.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/

相关文章:

c# - 分配给初始化列表中的只读属性

c# - vCard 4.0 正则表达式

.net - 有没有成熟的 C 框架?

Python 脚本未正确传递变量

c# - 如何填充 ASPxComboBox?

c# - 如何解决 WPF 应用程序中的字体呈现问题?

python - 从串行连接获取 b'\x0 8'b'\x9e'b'\x1d' 或 b'\xe 0'b'\xe 0'b' 错误

linux - 在Linux服务器上设置目录权限

c# - 远离数据库实现事务有什么缺点?

c# - 在异步方法中处理 session