2016-07-22 73 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相同的行爲。 –