2012-03-23 19 views
0

私が何をしているにしても、これを動作させることはできません。 "msg/server:"構文をBATファイルにドロップしてShell.Runから呼び出しても、 "'msg' 'は内部または外部コマンド、実行可能プログラムまたはバッチファイルとして認識されません。Wscript.Shell経由でHTAからMSG.exeを呼び出す

私も "msg.exe"と "c:\ windows \ system32 \ msg.exe"を試しました。すべてのフォームは、CMDコンソールの直接入力、およびVBScriptまたはCMD/BATスクリプトから正しく動作しますが、HTAからは正常に動作しません。それはセキュリティ機能の「設計による」ですか?とにかくこれの周りにはありますか?下位互換性のため

+0

CMDを呼び出すコードを投稿してください。 – Teemu

答えて

0

、MSHTA.exeの2つのバージョンと64ビットWindowsに発送します

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、START_MSG.cmdを開始するには、32ビットMSHTA.exeと.HTAファイルを関連付け、または単純なバッチファイルを作成することができます。

START C:\Windows\System32\mshta.exe C:\YOUR_PATH\MSG.hta 

私がしました下記のHTAをMSHTA.exeの64ビット版と32ビット版の両方でテストしました。 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> 
関連する問題