2010-08-24 2 views
0

Я пытаюсь запустить следующий фрагмент кода в DLL vb6:Wscript.Shell Run не работает последовательно

Dim objWSShell As Object 
Set objWSShell = CreateObject("Wscript.Shell") 
objWSShell.Run strPath & "test.bat", 0, True 

Процесс длл получает повесил трубку. Пакетный файл не будет запускаться, независимо от его содержимого. Я даже попробовал пустой пакетный файл, и он все еще зависал. Однако, если я попробую этот же код, с этим изменением:

Dim objWSShell As Object 
Set objWSShell = CreateObject("Wscript.Shell") 
objWSShell.Run "calc", 0, True 

Он отлично работает. Я не могу понять, почему exe-файлы работают, а bat-файлы - нет. Есть идеи?

ответ

2

Вам необходимо запустить cmd.exe и передать его BAT-файл.

objWSShell.Run "%COMSPEC% /c " & strPath & "test.bat", 0, True 
+0

Большое спасибо! Это сделал трюк. –

3

Вам не нужно использовать сценарии оболочки вещь, вы можете сделать вещи проще & использовать встроенный в Shell() функции:

shell environ$("COMSPEC") & " /C c:\xxx\yyy.bat", vbNormalFocus 

Ditto для:

shell "calc", vbNormalFocus 
+0

Я согласен с этим, и его можно улучшить с помощью технологии «Шелл и ждать», если это необходимо. Google должен легко показать некоторые примеры. – Bob77

+0

Я тоже это помню. –

1

I имел similar issue, где командные файлы не могли запускаться непосредственно из WScript.Shell, но у меня не было доступа для изменения VBScript. Оказывается, было переопределение реестра на расширение .bat.

При использовании COMSPEC работал для меня, удаление ключа реестра фактически фиксировалось больше, чем просто проблема WScript.

Смежные вопросы