2011-06-22 70 views
4

我看過這個線程打包的EXE,以及其他一些 How to run a local exe in my firefox extension運行在同一文件夾中安裝Firefox插件

的問題是,在部署和使用的Firefox 4.0.1,如果我安裝的.xpi延長,XPI就是把\ Profiles文件內... \擴展爲****。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不能被訪問如此

回答

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中,以確保它作爲解壓目錄安裝。

0

最好的答案是獲得flashgot的Firefox插件,它包含已經可執行的內部,並且是開源的,學習它,這是觀察實際工作原理的好方法。基於此,您可以儘可能多地添加可執行文件,或將整個程序添加爲FF插件。我希望這有助於,即使這個答案不是過時的。