无论我做什么,我都无法工作。即使我在BAT文件中删除“msg / server:”语法并从Shell.Run调用它,它仍然说“'msg'不被识别为内部或外部命令,可操作程序或批处理文件。”< / p>
我也试过“msg.exe”和“c:\ windows \ system32 \ msg.exe”。从CMD控制台直接输入,从VBScript或CMD / BAT脚本,但不是从HTA,所有表单都可以正常工作。这是“按设计”的安全功能吗?反正有吗?
答案 0 :(得分:0)
为了向后兼容,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>