【发布时间】:2019-11-21 10:01:53
【问题描述】:
我正在用 C# 开发一个应用程序。主要思想是:
- 按下按钮
- 打开 .bat 文件
- .bat 文件打开 Telnet [IP] [端口]
- .bat 文件执行 VBScript
- VBScript 将一些命令写入 telnet 窗口
当我通过双击运行此批处理文件时,它运行良好。但是,当我尝试从 C# 应用程序运行它时,它不起作用。
我已经尝试了很多方法。
以下是我尝试过的一些示例:
C# Winforms and command line batch files
batch works fine but "windows cannot find devcon.exe" in c# program
当我尝试这个时:
string cmd = @"path";
var m_command = new System.Diagnostics.Process();
m_command.StartInfo.FileName = @"file.bat";
m_command.StartInfo.Arguments = cmd;
m_command.Start();
我得到了错误:
windows 找不到 .exe 请确保您输入的名称正确,然后重试
当我尝试这个时:
string cmd = @"path";
var m_command = new System.Diagnostics.Process();
m_command.StartInfo.FileName = @"file.bat";
m_command.StartInfo.Arguments = cmd;
m_command.Start();
它可以工作,但只是打开 telnet,VBScript 不起作用。
这是.bat文件中的代码:
:: Open a Telnet window
start C:\Windows\System32\telnet.exe 192.168.0.198 49211
:: Run the script
cscript SendKeys.vbs
这是 .svs 文件中的代码:
set OBJECT=WScript.CreateObject("WScript.Shell")
WScript.sleep 500
OBJECT.SendKeys "T{ENTER}"
WScript.sleep 1000
OBJECT.SendKeys "T{ENTER}"
OBJECT.SendKeys " "
我希望 .VBS 将命令写入 telnet 窗口,但是当我单击 c# 表单中的按钮时,它只是打开 telnet,VBScript 不起作用。
【问题讨论】:
-
不要那样做。 从不使用
SendKeys自动执行Windowstelnet命令。而是使用实际上可编写脚本的telnet命令,例如plink来自PuTTY suite。 -
我没有用 C# 编写,甚至没有 Windows,但为什么不使用 Expect 和 TCL,它是为此类任务而发明的,例如与终端程序“对话”。远程登录?
-
你好,@AnsgarWiechers!谢谢你问我,但你能解释一下为什么不正确使用 SenKeys 吗?
-
SendKeys需要一个交互式 GUI(不能在后台进程中使用它),它会将击键发送到任何活动窗口。这可能是也可能不是您认为的那样。它非常不可靠,除非绝对没有其他方法可以解决手头的问题,否则不应使用它。甚至那时可能还没有。 -
我建议查看发布在 Stack Overflow 或其他网站上的 C# 代码,了解其他计算机上基于 telnet 的访问。例如C# Telnet Library 或Telnet Scripting in C#。我已经在一个用 C++ 编写的应用程序中实现了一个 telnet 客户端,并使用现在非常古老的 Visual Studio 6 使用万维网中的代码进行编译,这个 C++ 编码的应用程序仍然可以在 Windows 95 到 Windows 10 上运行,而无需调用任何其他可执行文件并且没有任何附加 DLL。
标签: c# batch-file cmd vbscript telnet