我正在尝试在vb6 dll中运行以下代码:
Dim objWSShell As Object
Set objWSShell = CreateObject("Wscript.Shell")
objWSShell.Run strPath & "test.bat", 0, True
dll进程被挂断。不管其内容如何,该批处理文件都不会运行。我什至尝试了一个空的批处理文件,但仍然挂了。但是,如果我尝试使用同一段代码,请进行以下更改:
Dim objWSShell As Object
Set objWSShell = CreateObject("Wscript.Shell")
objWSShell.Run "calc", 0, True
效果很好。我不知道为什么exe文件可以工作而bat文件不能工作。有什么想法吗?
您需要运行cmd.exe并将BAT文件传递给它。
objWSShell.Run "%COMSPEC% /c " & strPath & "test.bat", 0, True
您不需要使用shell脚本编写的东西,可以使事情变得更简单并使用内置的Shell()
函数:
shell environ$("COMSPEC") & " /C c:\xxx\yyy.bat", vbNormalFocus
Ditto用于:
shell "calc", vbNormalFocus
我有一个similar issue,无法直接从WScript.Shell
运行批处理文件,但是我无权修改VBScript。原来,.bat扩展名上存在注册表覆盖。
尽管使用COMSPEC对我有用,但是删除注册表项实际上不仅解决了WScript问题,还解决了更多问题。