爲了向後兼容,64位Windows附帶MSHTA.exe的兩個版本:
C:\Windows\SysWOW64\mshta.exe and
C:\Windows\System32\mshta.exe
您所描述的行爲是對64位MSHTA.exe的珍品之一,它不能調用MSG.exe等32位應用程序。請注意,c:\ windows \ SysWOW64 \ cmd.exe中的64位命令提示符也將無法找到MSG.exe。
要解決這個問題,您可以將文件關聯名.hta與32位MSHTA.exe,或創建一個簡單的批處理文件來啓動你的HTA,START_MSG.cmd:
START C:\Windows\System32\mshta.exe C:\YOUR_PATH\MSG.hta
我已經用64位和32位版本的MSHTA.exe測試了HTA。 64位版本引發「找不到文件」錯誤,但32位版本起作用。
<script language="Javascript">
var E, LineWriteTimerID
function execWithStatus(cmdLine){
E = new ActiveXObject("WScript.Shell").Exec(cmdLine);
LineWriteTimerID = window.setInterval("writeOutLine()",100);
E.StdIn.Close();
}
function writeOutLine(){
if(E.StdOut.AtEndOfStream) window.clearTimeout(LineWriteTimerID);
if(!E.StdErr.AtEndOfStream) txtResults.value += "ERROR: " + E.StdErr.ReadAll() + "\n";
if(!E.StdOut.AtEndOfStream) txtResults.value += E.StdOut.ReadLine() + "\n";
}
</script>
<textarea id=txtCmd style="width:90%" rows=1>MSG.exe</textarea>
<button onclick="execWithStatus(txtCmd.value)">Run</button>
<br><textarea id=txtResults style="width:100%" rows=20></textarea>
請張貼應該調用CMD的代碼。 – Teemu 2012-03-23 21:52:52