我以这种方式从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);
}
答案 0 :(得分:2)
到目前为止我唯一能听到的解决方案(虽然我还没有完成,但是来自Moz的Mozilla xulrunner IRC频道:
创建临时批处理文件,在批处理文件中写入调用和参数以传递它。然后执行临时批处理文件。
例如psuedocode:
f = fopen("temp.bat");
fprintf(f, "other.bat 1 2 3 4 5");
fclose(f);
exec("temp.bat");
不是很优雅,但它应该有用。
答案 1 :(得分:1)
您是否尝试过使用nsiLocalFile的启动方法?
function runBatch(){
var exe = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
exe.initWithPath("C:\\test.bat");
exe.launch();
}
答案 2 :(得分: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);
答案 3 :(得分: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放在init ???
由于
答案 4 :(得分: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
}
在我的Window批处理文件中我做了:
@ECHO OFF
START "application.exe" %1
使用START,允许我启动应用程序并关闭命令行窗口
答案 5 :(得分:-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);
更好,并且有效:)
答案 6 :(得分:-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>