2016-06-16 4 views
0

私は、ローカルにインストールされたプログラムと通信してデータを交換するためのFirefoxアドオンを書きたいと思います。これは、js-ctypesまたは低レベルのsystem/child_process APIを使用して実行できます(後者はrecommended solutionです)。Firefoxのアドオン内でsystem/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に組み込まれていないほとんどの実行可能ファイルに共通すると思います。だから私の質問です:私は使用する実行可能ファイルの完全なパスを見つける必要がありますか?私は複数のOSをサポートする必要がありますが、必要に応じてそれぞれ異なるソリューションを用意している可能性があります。

ありがとうございます!

+2

予想される場所を繰り返す必要があります。一般的なloctionsの多くは 'OS.Constants.Path'にリストされています。デスクトップなどです。あなたはいつでも、ユーザにその場所を提供させることができます。環境情報を入手できます - https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/system_environment – Noitidart

+2

https://developer.mozilla.org/en-US/Add-ons/ SDK/Low-Level_APIs/io_file - ディレクトリにファイルをリストする方法を示します。 child_processはjs-ctypes自体で書かれています。それを書き直さないでください – Noitidart

+0

他のアプリケーションはどのように正確な場所を見つけるのですか? 'PATH'やその他の環境変数の中にありますか?ユーザーのホームディレクトリに設定ファイルがありますか? – the8472

答えて

1

これは私が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のシステムフォルダがありませんでも(標準名を持っているという違いがあることで、それは同様のことを期待しますローカライズされたシステムで)。

関連する問題