各位大侠,双击BAT文件可以正常达到效果,用VB shell调用却不行?

3gw 2019-04-30 10:09:15
重启光猫.bat
rem 启动telnet
start telnet.exe
rem batch telnet
cscript //nologo 华为.vbs
exit


华为.vbs
'建立Shell对象
set sh=WScript.CreateObject("WScript.Shell")
WScript.Sleep 1000
'向telnet发送我们平时录入的命令
sh.SendKeys "open 192.168.1.1"
WScript.Sleep 1000
sh.SendKeys "{ENTER}"
WScript.Sleep 1000
sh.SendKeys "root{ENTER}"
WScript.Sleep 1000
sh.SendKeys "adminHW{ENTER}"
WScript.Sleep 1000
sh.SendKeys "su{ENTER}"
WScript.Sleep 1000
sh.SendKeys "shell{ENTER}"
WScript.Sleep 1000
sh.SendKeys "reboot{ENTER}"
WScript.Sleep 68000'68秒,等出现失去连接时才行
sh.SendKeys "{ENTER}"
WScript.Sleep 1000
sh.SendKeys "{ENTER}"
WScript.Sleep 1000
sh.SendKeys "{ENTER}"
WScript.Sleep 1000
sh.SendKeys "quit{ENTER}"
WScript.Sleep 1000


上面两个文件在同一目录下,双击“重启光猫.bat”,可以正常执行telnet重启光猫。但是我VB里调用 Shell CurrentPath & "重启光猫.bat",可以打开bat,但是报错,也没效果
1、找不到telnet.exe错误提示
2、我如果复制telnet.exe到目录下,虽然不出错误提示,但是完全不是是登录telnet了。求教各位这个莫名其妙问题。WIN7 64系统下测试。
...全文
394 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
亚纹 2019-05-01
  • 打赏
  • 举报
回复
API 控制 重定向
Wow64DisableWow64FsRedirection
Wow64RevertWow64FsRedirection
Wow64EnableWow64FsRedirection
舉杯邀明月 2019-05-01
  • 打赏
  • 举报
回复
既然你的是64位系统,那个telnet.exe也应该是 x64的应用程序。
如果你的 Shell命令参数不正确,会启动 SysWOW64下的cmd.exe去执行你的bat;
然后:它无法访问“真正的System32目录”,当然也很可能造成找不到telnet.exe了。

你单独复制一个telnet.exe 跟你的“程序”放一起,虽然能“找到exe”了,
 但也可能造成telnet.exe无法正确访问64位组件目录,导致它无法正确运行。

我估计通过“正确调用 System32\cmd.exe” 执行你的bat文件,应该能解决问题。
舉杯邀明月 2019-05-01
  • 打赏
  • 举报
回复
引用 3 楼 3gw 的回复:
改成
重启光猫.bat
rem 启动telnet
start C:\Windows\System32\telnet.exe
rem batch telnet
cscript //nologo 华为.vbs
exit


双击可以,VB shell调用,提示找不到文件C:\Windows\System32\telnet.exe,其实这个文件是存在的。

我在上面说过了呀,你如果没有“正确方法”,
 那么在x64系统中,被启动的进程将“无法访问真正的System32”,导致x64程序不能正常运行。
有个很简单的验证方法:
 你用shell 启动cmd.exe ,加参数: " /k" ,这样命令行窗口不会自动退出。
 比如VB代码为 shell "cmd.exe /k", vbNormalFocus
 此时:你在那个命令行窗口中执行:echo %PROCESSOR_ARCHITECTURE%
 如果它显示的内容是x86,说明启动的是32位的那么cmd.exe(一般就是这个结果);
 如果它显示的内容是 AMD64 ,那么说明你成功启动了64位的cmd.exe 了。

然后,你用同样的“方法”执行你的bat文件,就可以正常执行telnet.exe了。 
3gw 2019-05-01
  • 打赏
  • 举报
回复
引用 10 楼 milaoshu1020 的回复:
你在控制面板/添加删除程序/添加windows组件,找到telnet客户端,选中,点确定,就可以装telnet了; 网上很多教程,搜索"win7安装telnet"就可以搜到了;
这个早已弄好,只是VB调用问题
3gw 2019-05-01
  • 打赏
  • 举报
回复
改成 重启光猫.bat
rem 启动telnet
start C:\Windows\System32\telnet.exe
rem batch telnet
cscript //nologo 华为.vbs
exit
双击可以,VB shell调用,提示找不到文件C:\Windows\System32\telnet.exe,其实这个文件是存在的。
3gw 2019-05-01
  • 打赏
  • 举报
回复
引用 1 楼 舉杯邀明月 的回复:
我估计通过“正确调用 System32\cmd.exe” 执行你的bat文件,应该能解决问题。
请问如何正确调用呢?修改BAT文件,还是shell如何正确调用?
milaoshu1020 2019-05-01
  • 打赏
  • 举报
回复
你在控制面板/添加删除程序/添加windows组件,找到telnet客户端,选中,点确定,就可以装telnet了;
网上很多教程,搜索"win7安装telnet"就可以搜到了;
3gw 2019-05-01
  • 打赏
  • 举报
回复
[quote=引用 8 楼 3gw 的回复:] 也不行,提示文件未找到
3gw 2019-05-01
  • 打赏
  • 举报
回复
引用 7 楼 milaoshu1020 的回复:
试试看,这样行不行:

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
    Shell "telnet", vbNormalFocus
    Sleep 1000
    DoEvents
    '向telnet发送我们平时录入的命令
    SendKeys "open 192.168.1.1"
    Sleep 1000
    DoEvents
    SendKeys "{ENTER}"
    Sleep 1000
    DoEvents
    SendKeys "root{ENTER}"
    Sleep 1000
    DoEvents
    SendKeys "adminHW{ENTER}"
    Sleep 1000
    DoEvents
    SendKeys "su{ENTER}"
    Sleep 1000
    DoEvents
    SendKeys "shell{ENTER}"
    Sleep 1000
    DoEvents
    SendKeys "reboot{ENTER}"
    Dim i As Integer
    For i = 1 To 68
        Sleep 1000 '68秒,等出现失去连接时才行
        DoEvents
    Next
    SendKeys "{ENTER}"
    Sleep 1000
    DoEvents
    SendKeys "{ENTER}"
    Sleep 1000
    DoEvents
    SendKeys "{ENTER}"
    Sleep 1000
    DoEvents
    SendKeys "quit{ENTER}"
    Sleep 1000
End Sub
也不行,提示找不到文件C:\Windows\System32\telnet.exe
milaoshu1020 2019-05-01
  • 打赏
  • 举报
回复
试试看,这样行不行:

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
Shell "telnet", vbNormalFocus
Sleep 1000
DoEvents
'向telnet发送我们平时录入的命令
SendKeys "open 192.168.1.1"
Sleep 1000
DoEvents
SendKeys "{ENTER}"
Sleep 1000
DoEvents
SendKeys "root{ENTER}"
Sleep 1000
DoEvents
SendKeys "adminHW{ENTER}"
Sleep 1000
DoEvents
SendKeys "su{ENTER}"
Sleep 1000
DoEvents
SendKeys "shell{ENTER}"
Sleep 1000
DoEvents
SendKeys "reboot{ENTER}"
Dim i As Integer
For i = 1 To 68
Sleep 1000 '68秒,等出现失去连接时才行
DoEvents
Next
SendKeys "{ENTER}"
Sleep 1000
DoEvents
SendKeys "{ENTER}"
Sleep 1000
DoEvents
SendKeys "{ENTER}"
Sleep 1000
DoEvents
SendKeys "quit{ENTER}"
Sleep 1000
End Sub
3gw 2019-05-01
  • 打赏
  • 举报
回复
引用 4 楼 舉杯邀明月 的回复:
[quote=引用 3 楼 3gw 的回复:] 改成 重启光猫.bat
rem 启动telnet
start C:\Windows\System32\telnet.exe
rem batch telnet
cscript //nologo 华为.vbs
exit
双击可以,VB shell调用,提示找不到文件C:\Windows\System32\telnet.exe,其实这个文件是存在的。
我在上面说过了呀,你如果没有“正确方法”,  那么在x64系统中,被启动的进程将“无法访问真正的System32”,导致x64程序不能正常运行。 有个很简单的验证方法:  你用shell 启动cmd.exe ,加参数: " /k" ,这样命令行窗口不会自动退出。  比如VB代码为 shell "cmd.exe /k", vbNormalFocus  此时:你在那个命令行窗口中执行:echo %PROCESSOR_ARCHITECTURE%  如果它显示的内容是x86,说明启动的是32位的那么cmd.exe(一般就是这个结果);  如果它显示的内容是 AMD64 ,那么说明你成功启动了64位的cmd.exe 了。 然后,你用同样的“方法”执行你的bat文件,就可以正常执行telnet.exe了。 [/quote] 是x86,shell "重启光猫.bat /k", vbNormalFocus 这样调用,仍然不行,仍然提示找不到文件C:\Windows\System32\telnet.exe

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧