使用firefox启动系统PATH中的外部程序

时间:2011-06-25 12:49:52

标签: javascript firefox-addon

我有一个插件,我想用它来启动我的计算机上安装的程序,例如notepad.exe
问题是看起来firefox没有搜索程序的系统PATH,即

        file.initWithPath("c:\\windows\\system32\\notepad.exe");//works
    //file.initWithPath("notepad.exe");//does not work
        //file.initWithPath("%systemroot%\\notepad.exe");//does not work


问题:
有没有办法让firefox在系统PATH中查找程序?
这是我的完整功能

autoStartNotepad:function()
{
    // create an nsILocalFile for the executable
    var file = Components.classes["@mozilla.org/file/local;1"]
         .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath("notepad.exe");//does not work
    //but file.initWithPath("c:\\windows\\system32\\notepad.exe");//works

    // create an nsIProcess
    var process = Components.classes["@mozilla.org/process/util;1"]
                        .createInstance(Components.interfaces.nsIProcess);
    process.init(file);

    // Run the process.
    // If first param is true, calling thread will be blocked until
    // called process terminates.
    // Second and third params are used to pass command-line arguments
    // to the process.
    var args = [];
    process.run(false, args, args.length);
}

1 个答案:

答案 0 :(得分:2)

nsIProcess不会这样做,它只接受完整路径。您需要自己查看环境变量:

var environment = Components.classes["@mozilla.org/process/environment;1"]
                            .getService(Components.interfaces.nsIEnvironment);
var path = environment.get("PATH");
var root = environment.get("SYSTEMROOT");

您可以拆分PATH变量并检查各种目录或使用SYSTEMROOT变量的值。

您可以运行cmd.exe /c notepad.exe,但您还需要先找到cmd.exe