2016-07-22 85 views
2

在VBScript中,WScript.Shell.Run方法有three arguments,其中第三个是布尔值,指定程序是否应等待新生成的进程在继续之前完成。bWaitOnReturn从HTA运行时对mstsc.exe没有影响

我无法使此行为与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." 

但是,如果我尝试从一个HTA文件执行相同的代码,它不能正常工作 - 而是运行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> 

任何想法为什么发生这种情况,以及如何解决它?

编辑:我在Windows 10试用了7

+0

不能重现做。第二个消息框仅在两种情况下关闭RDP连接后出现。 –

+0

@AnsgarWiechers你正在使用什么操作系统?我应该提到我在Windows 10上遇到过这个问题......(尽管已经在几台PC上尝试过了)。 –

+1

我在Windows 10上得到了同样的结果。我怀疑这是因为HTA被设置为32位运行,但即使将mstsc更改为32位版本也没有区别。 – 2016-07-23 00:26:30

回答

4

使用MSTSC的64位版本。 c:\windows\sysnative\mstsc.exeSysnative允许32位程序访问System32目录。尝试访问C:\windows\system32的32位程序被重定向到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

另一种选择是使用64位解释器('C:\ Windows \ System32 \ mshta.exe')运行HTA。由于某些原因,微软决定在64位版本的操作系统上将32位mshta.exe作为默认解释器。 VBScript文件默认使用64位版本的'cscript.exe'运行。如果你使用32位版本(来自'C:\ Windows \ SysWOW64')运行它们,你会得到与HTA相同的行为。 –