4

この方法で Javascript からバッチ ファイルを呼び出しています。

function runBatch(){
    var exe = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
    exe.initWithPath("C:\\test.bat");
    var run = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
    run.init(exe);
    var parameters = ["hi"];
    run.run(false, parameters,parameters.length);
}

私のテストバッチファイルは次のとおりです。

echo on
echo %1 
pause
exit

ただし、バッチ ファイルを呼び出すたびに、デスクトップからバッチ ファイルを実行した場合と同様に、コマンド プロンプトは表示されません。これを修正し、バッチ ファイルのコマンド プロンプトを表示するにはどうすればよいですか?

編集 明確にするために、cmd.exe プロセスが起動されます - タスク バーに表示されます。しかし、ウィンドウは表示されません。このスニペットは同様に動作します。

function runCmd(){  
var exe = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
exe.initWithPath("C:\\WINDOWS\\system32\\cmd.exe");
var run = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
run.init(exe);
run.run(false, null,0);
}
4

7 に答える 7

2

これまでに聞いた唯一の解決策は (うまくいくはずですが、まだ行っていませんが、Mozilla xulrunner IRC チャンネルの Mook から来ています。

一時バッチ ファイルを作成し、呼び出すバッチ ファイルとそれを渡す引数を書き込みます。次に、一時バッチ ファイルを実行します。

例: 疑似コード:

f = fopen("temp.bat"); 
fprintf(f, "other.bat 1 2 3 4 5"); 
fclose(f); 
exec("temp.bat");

あまりエレガントではありませんが、うまくいくはずです。

于 2008-11-23T02:10:52.583 に答える
1

nsiLocalFile の起動方法を試してみましたか?

function runBatch(){
    var exe = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
    exe.initWithPath("C:\\test.bat");
    exe.launch();
}

これにより、「ファイルをダブルクリックした場合と同じ効果」が得られるはずです。

于 2008-11-23T00:15:10.850 に答える
0

バッチ ファイルを起動して引数を渡す必要がありました。これが私がやった方法です:

    let file = uri.QueryInterface(Components.interfaces.nsIFileURL).file;

    let run = Components.classes['@mozilla.org/process/util;1']
                        .createInstance(Components.interfaces.nsIProcess);

    let path = file.path;

    if(file.exists())
    {
        // quick security check
        if(file.isExecutable())
        {
            // show error message
            return;
        }

        let localfile = file.QueryInterface(Components.interfaces.nsILocalFile);

        if(localfile != null)
        {
            if (app == "app1")
            {
               localfile.initWithPath("C:\\app1.bat");            
            }
            else
            {
               localfile.initWithPath("C:\\app2.bat");
            }
            run.init(localfile);
            var parameters = [path];
            run.run(false, parameters, parameters.length);
        }
        else
        {
           // show error message
        }
    }
    else
    {
        // show error message
    }

私のウィンドウバッチファイルでは、次のことを行いました。

@ECHO OFF
START "application.exe" %1

START を使用して、アプリケーションを起動し、コマンド ライン ウィンドウを閉じることができました

于 2013-03-25T17:25:36.007 に答える
0

あなたは正しくやっていますが、これを修復してください:

function runBatch(){
    var exe = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
    exe.initWithPath("***C:\ \test.bat***");
    var run = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
    run.init(exe);
    var parameters = ["hi"];
    run.run(false, parameters,parameters.length);
}

こうすれば???

function runBatch(){
    var exe = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
    exe.initWithPath("***C:\test.bat***");
    var run = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
    run.init(exe);
    var parameters = ["hi"];
    run.run(false, parameters,parameters.length);
}

初期化時に@echoをオフにする???

ありがとう

于 2011-02-10T16:23:09.687 に答える
0

このコード スニペットは正常に動作するようです。もちろん、D:\Windows\system32\ をオペレーティング システムの cmd.exe へのパスに変更する必要があります。

const FileFactory = new Components.Constructor("@mozilla.org/file/local;1","nsILocalFile","initWithPath");
var str_LocalProgram = "D:\\Windows\\system32\\cmd.exe";
var obj_Program = new FileFactory(str_LocalProgram); 
var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
process.init(obj_Program);
var args = ["/C", "regedit.exe"];
process.run(true, args, args.length);
于 2009-08-15T17:07:25.187 に答える
-1

Pfft、非常に醜いコード..もっと良いトリックは、Win.comを使用してコマンドプロンプトの16ビットサブシステムを生成することです。Win.comはコンソールを適切な仮想端末に送信し、出力を表示します。

var lPath = getWorkingDir.path + "\\..\\..\\WINDOWS\\system32\\win.com";
lFile.initWithPath(lPath);
var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
process.init(lFile);
 var args = ["cmd.exe"];
process.run(false, args, args.length);

より良い、そして動作します:)

于 2009-03-17T23:15:51.077 に答える
-1

Linux の場合:

<script>

    function callLight2()
    {

        netscape.security.PrivilegeManager.enablePrivilege(
        'UniversalXPConnect'
    );
        var exe = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
    // exe.initWithPath(C:\\Windows\\system32\\cmd.exe"");
        exe.initWithPath("/usr/bin/gnome-terminal");

        var run = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
        run.init(exe);        

        var parameters = ["-e", "/usr/bin/ip_connect_up.sh 2 2 3 4 5 6"];
    // var parameters = ["/C", "regedit.exe"];
    // var parameters = ["hi"];
        run.run(true, parameters,parameters.length);

    }


</script>


<a href="#" onClick ="callLight2()">start</a>
于 2011-07-18T12:23:20.887 に答える