我正在尝试在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文件不工作。有什么想法吗?
答案 0 :(得分:3)
您不需要使用shell脚本编写的东西,您可以使事情更简单&使用内置的Shell()
函数:
shell environ$("COMSPEC") & " /C c:\xxx\yyy.bat", vbNormalFocus
同上:
shell "calc", vbNormalFocus
答案 1 :(得分:2)
您需要运行cmd.exe并将BAT文件传递给它。
objWSShell.Run "%COMSPEC% /c " & strPath & "test.bat", 0, True
答案 2 :(得分:1)
我有一个similar issue,批处理文件无法直接从WScript.Shell运行,但我没有权限修改VBScript。事实证明,.bat扩展名上有一个注册表覆盖。
虽然使用COMSPEC为我工作,但删除注册表项实际上修复的不仅仅是WScript问题。