Извикване на MSG.exe от HTA чрез Wscript.Shell Run

Не мога да накарам това да работи, независимо какво правя. Дори ако пусна синтаксиса „msg /server:“ в BAT файл и го извикам от Shell.Run, той пак казва „„msg“ не се разпознава като вътрешна или външна команда, работеща програма или пакетен файл.“

Опитах също "msg.exe" и "c:\windows\system32\msg.exe". Всички формуляри работят добре от директно влизане в CMD конзола и от VBScript или CMD/BAT скрипт, но не и от HTA. Това функция за сигурност "по дизайн" ли е? Има ли все пак около това?


person Skatterbrainz    schedule 23.03.2012    source източник
comment
Моля, публикувайте кода, който трябва да извика CMD.   -  person Teemu    schedule 24.03.2012


Отговори (1)


За обратна съвместимост 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