4

我已阅读此线程和其他一些 如何在我的 Firefox 扩展中运行本地 exe

问题是,在部署和使用 firefox 4.0.1 时,如果我安装 .xpi 扩展名,xpi 将作为 ****.xpi 放在 \Profiles...\extensions 中,这是一种压缩格式

所有解决方案都假定扩展名放在文件夹中,因此他们按原样访问文件夹,我不能这样做

例如这个人说

//**** 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-4815ddffeb8}.xpi 无法通过这种方式访问

4

2 回答 2

1

首先,请不要定位这样的文件——你对 Firefox 配置文件的目录结构做了很多假设,任何这些都可能在未来的 Firefox 版本中(甚至在不常见的扩展设置场景中)变成错误的。请参阅将二进制组件引用到 js-ctypes以获取在扩展安装目录中定位文件的代码,只需替换components/linux/myLib.sosample.exe并执行uri.file.

第二:这种情况下打包的 XPI 安装将不起作用,除非您想在运行之前将可执行文件提取到临时文件中(这会很复杂)。Windows 不支持从 ZIP 存档运行可执行文件。所以你需要添加<em:unpack>true</em:unpack>到你的扩展的 install.rdf 以确保它被安装为一个解压目录。

于 2011-06-23T07:10:18.807 回答
0

最好的答案是获得 flashgot Firefox 插件,其中包含已经在内部执行的,并且是开源的,并且,研究它,这是观察其实际工作原理的好方法。基于此,您可以制作任意数量的带有可执行文件的插件,或者将整个程序添加为 FF 插件。我希望这会有所帮助,即使这个答案不是过时的。

于 2013-03-15T04:26:43.520 回答