我已经读过这个帖子,还有其他一些 How to run a local exe in my firefox extension
问题是,在部署和使用firefox 4.0.1时,如果我安装.xpi扩展名,xpi将被放在\ Profiles ... \ extensions中作为****。xpi,这是一种压缩格式
所有解决方案都假设扩展名放在一个文件夹中,因此他们按原样访问该文件夹,这是我无法做到的
例如,这家伙说//**** get profile folder path ****
var dsprops = Components.classes['@mozilla.org/file/directory_service;1']
.getService(Components.interfaces.nsIProperties);
var ProfilePath = dsprops.get("ProfD", Components.interfaces.nsIFile).path;
//**** initialize file ****
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(ProfilePath);
//**** append each step in the path ****
file.append("extensions");
file.append("guid");
file.append("sample.exe");
在我的情况下,guid安装为{f13b157f-b174-47e7-a34d-4815ddfdfeb8} .xpi,无法通过这种方式访问
答案 0 :(得分:1)
首先,请不要找到这样的文件 - 你对Firefox配置文件的目录结构做了很多假设,在未来的Firefox版本中(或者甚至在不常见的扩展设置方案中,任何一个都可能会变错) )。请参阅Reference a binary-component to js-ctypes代码以查找扩展程序安装目录中的文件,只需将components/linux/myLib.so
替换为sample.exe
并执行uri.file
。
第二:除非你想在运行它之前将可执行文件解压缩到一个临时文件中(这将很复杂),否则打包XPI安装将无法运行。 Windows不支持从ZIP存档运行可执行文件。因此,您需要将<em:unpack>true</em:unpack>
添加到扩展程序的install.rdf中,以确保它作为解压缩目录安装。
答案 1 :(得分:0)
最好的答案是获得flashgot Firefox插件,其中contanins已经可以执行,并且是开源的,并研究它,这是观察它实际工作原理的好方法。基于此,你可以制作尽可能多的内置可执行文件的插件,或者将整个程序添加为FF插件。我希望这有帮助,即使这个答案不是过时的。