2016-07-22 8 views
2

В VBScript метод WScript.Shell.Run имеет three arguments, третий из которых является логическим значением, указывающим, должна ли программа ждать завершения процесса, который был вновь обработан, до продолжения.bWaitOnReturn не влияет на mstsc.exe при запуске с HTA

У меня возникли проблемы с правильной работой этого поведения с помощью mstsc.exe (программа подключения к удаленному рабочему столу в Windows).

Если я сохраню файл ниже test.vbs и выполнит его с помощью cscript test.vbs, он будет работать как ожидалось.

Set obj = CreateObject("WScript.Shell") 
Call obj.Run("notepad.exe", 1, true) 
MsgBox "You just closed notepad." 
Call obj.Run("mstsc.exe", 1, true) 
MsgBox "Remote desktop just closed." 

Однако, если я пытаюсь выполнить один и тот же код из файла ОМТ, он не работает должным образом - скорее, окно сообщения после запуска mstsc.exe появляется сразу, а не ждать.

<html> 
<head> 
<script language="VBScript"> 
Sub RunProgram 
    Set obj = CreateObject("WScript.Shell") 
    Call obj.Run("notepad.exe", 1, true) 
    MsgBox "You just closed notepad." 
    Call obj.Run("mstsc.exe", 1, true) 
    MsgBox "Remote desktop is still open!" 
End Sub 
</script> 
</head> 
</body> 
<body onload=RunProgram> 
</html> 

Любая идея, почему это происходит и как ее исправить?

EDIT: Я проверил это на Windows 10 и 7.

+0

не может воспроизвести. Второе окно сообщения появляется только после закрытия соединения RDP в обоих случаях. –

+0

@AnsgarWiechers Какая операционная система вы используете? Я должен был упомянуть, что я испытываю это в Windows 10 ... (попробовал это на нескольких ПК, хотя). –

+1

Я получаю то же самое в Windows 10. Я подозреваю, что это связано с тем, что HTA устанавливается как 32 бит, но даже изменение mstsc на 32-битную версию не имеет никакого значения. –

ответ

4

Используйте 64-разрядную версию MSTSC. c:\windows\sysnative\mstsc.exeSysnative позволяет 32-битным программам получить доступ к каталогу System32. 32-разрядная программа, пытающаяся получить доступ к C:\windows\system32, перенаправляется на c:\windows\syswow64.

С моего первого комментария.

я получаю то же самое на Windows, 10. Я подозреваю, что это связанно с HTA быть настроена для работы в качестве 32 бита, но даже изменение Mstsc к 32-разрядной версии не имеет никакого значения

+2

для получения дополнительной информации [Редиректор файловой системы] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384187 (v ​​= vs.85) .aspx) –

+1

Да, это интересно. Спасибо за вашу помощь! Это исправило это для меня. –

+0

Другой вариант - запустить HTA с помощью 64-битного интерпретатора ('C: \ Windows \ System32 \ mshta.exe'). По какой-то причине Microsoft решила сделать 32-разрядный «mshta.exe» интерпретатором по умолчанию даже в 64-разрядных версиях ОС. Файлы VBScript запускаются с 64-разрядной версией 'cscript.exe' по умолчанию. Если вы запустите их с 32-разрядной версией (из 'C: \ Windows \ SysWOW64'), вы получите то же поведение, что и с HTA. –