我正在创建运行特定.bat
文件的Firefox附加组件。
这是我用的代码。
main.js
const {Components, Cc, Ci,Cu} = require("chrome");
var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
file.initWithPath("C:\\Users\\Madhawa.se\\Desktop\\snap\\shoot.bat"); // i want to open this bat from xpi .for example from data directory
var args="this is an argument ";
var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, args, args.length);
它运行正常,但我想从加载项内部打开shoot.bat
文件,这样我就可以轻松地将加载项作为单个xpi
分发。
如何从附加组件中打开此bat文件,例如我可以将shoot.bat
文件放在我的Firefox附加组件的data directory
内,但是如何打开它?不可能吗?有没有更好的方法来实现这个目标?
答案 0 :(得分:4)
虽然从附加XPI中读取数据相当容易,但是无法以这种方式创建进程。 Windows,特别是Windows可执行加载程序,不知道如何阅读.xpi
。
执行批处理文件或其内容可能是通过在执行前在磁盘上的某处写入批处理文件,或者使用该批处理的内容组装cmd /K
兼容的参数字符串来实现的。文件
首先读取批处理文件可以实现,例如将request
模块与data.url()
一起使用。
const {Request} = require("sdk/request");
const {data} = require("sdk/self");
Request({url: data.url("shoot.bat"), onComplete: function(response) {
var batch = response.text;
// ...
}});
当然,将批处理文件的内容放在Javascript源代码本身可能更容易,以完全避免使用Request
内容。
现在,您可以将批处理文件内容写入文件,例如使用io/file
和/或OS.File
(后者目前是首选,主要是因为io/file
不是异步),并执行该操作。
或者您可以正确格式化与cmd /K
一起使用的内容。