c#打开批处理文件但不执行.bat中的VBScript
Posted
技术标签:
【中文标题】c#打开批处理文件但不执行.bat中的VBScript【英文标题】:c# opens the batch file but doesn't execute the VBScript in the .bat 【发布时间】:2019-11-21 10:01:53 【问题描述】:我正在用 C# 开发一个应用程序。主要思想是:
-
按下按钮
打开 .bat 文件
.bat 文件打开 Telnet [IP] [端口]
.bat 文件执行 VBScript
VBScript 将一些命令写入 telnet 窗口
当我通过双击运行此批处理文件时,它运行良好。但是,当我尝试从 C# 应用程序运行它时,它不起作用。
我已经尝试了很多方法。
以下是我尝试过的一些示例:
Is it possible to use a batch file to establish a telnet session, send a command and have the output written to a file?
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 "TENTER"
WScript.sleep 1000
OBJECT.SendKeys "TENTER"
OBJECT.SendKeys " "
我希望 .VBS 将命令写入 telnet 窗口,但是当我单击 c# 表单中的按钮时,它只是打开 telnet,VBScript 不起作用。
【问题讨论】:
不要那样做。 从不使用SendKeys
自动执行Windows telnet
命令。而是使用实际上可编写脚本的 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。
【参考方案1】:
你可以做的是找到cscript.exe文件并直接执行它,像这样:
for /f "tokens=*" %%C in ('where csscript.exe') do (%%C Sendkeys.vbs&goto Next)
:Next
rem This is only necessary because we want to run the script once
这个migth工作,但正如评论者所说,真的不推荐使用sendkeys
,因为一旦窗口设置不正确,或者某些进度会延迟,它可能会导致重大问题。
【讨论】:
以上是关于c#打开批处理文件但不执行.bat中的VBScript的主要内容,如果未能解决你的问题,请参考以下文章