我如何在Firefox附加组件中找到与系统/Child_process API一起使用的文件



我想编写一个与本地安装的程序交流以交换数据的Firefox附加组件。看来可以使用JS-ctypes或低级系统/Child_process API完成,后者是推荐的解决方案。

CHILD_PROCESS API会吸引它,因为它可以抽象地通过管道发送和接收数据,而不是直接在C接口级别发送。但是,要使用它需要(似乎)为您的代码中的可执行文件提供完整的路径:

var child_process = require("sdk/system/child_process");
var ls = child_process.spawn('/bin/ls', ['-lh', '/usr']);

就我而言,可执行文件是由另一个应用程序安装的,我们不知道它的确切位置 - 根据用户的驱动器,可能是用户的偏好,它会有所不同。我想这个问题对于大多数内置在操作系统中的可执行文件来说都是常见的。所以我的问题是:我必须找到要使用的可执行文件的完整路径?我需要支持多个OS,但大概可以在需要时为每个OS提供不同的解决方案。

谢谢!

这是我在Windows上使用的代码 - 钥匙可以读取环境变量以查找适当的应用程序文件夹的位置。之后,我假设我的应用程序存储在一个众所周知的子路径下(我们不允许自定义)。

var system = require("sdk/system");
var iofile = require('sdk/io/file');
var child_process = require('sdk/system/child_process');
var progFilesFolder = system.env["programfiles(x86)"],
    targetFile = iofile.join(progFilesFolder, 'FolderName', 'Program.exe');
    targetFileExists = iofile.exists(targetFile);
if (targetFileExists) {
    var p = child_process.spawn(targetFile);
}

我尚未为Mac编写代码,但我希望它相似,不同之处在于,没有驱动器信件需要担心,并且OS X中的系统文件夹具有标准名称(即使在本地化系统上)。

最新更新