За обратна съвместимост 64-битовият Windows се доставя с две версии на MSHTA.exe:
C:\Windows\SysWOW64\mshta.exe and
C:\Windows\System32\mshta.exe
Поведението, което описвате, е едно от любопитствата за 64-битовия MSHTA.exe, той не може да извиква 32-битови приложения като MSG.exe. Имайте предвид, че 64-битовият команден ред в c:\windows\SysWOW64\cmd.exe също няма да успее да намери MSG.exe.
За да коригирате това, можете да свържете .hta файлове с 32-битовия MSHTA.exe или да създадете обикновен пакетен файл, за да стартирате вашия HTA, START_MSG.cmd:
START C:\Windows\System32\mshta.exe C:\YOUR_PATH\MSG.hta
Тествах HTA по-долу както с 64, така и с 32-битовата версия на MSHTA.exe. 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>
person
Rich
schedule
12.06.2012