Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在firefox启动失败时捕获错误_Javascript_Firefox Addon_Command Line Arguments_Xpcom - Fatal编程技术网

Javascript 如何在firefox启动失败时捕获错误

Javascript 如何在firefox启动失败时捕获错误,javascript,firefox-addon,command-line-arguments,xpcom,Javascript,Firefox Addon,Command Line Arguments,Xpcom,下面的代码使用nsIProcess和runAsync启动配置文件。如果它在使用中,它将显示一个警报。我想抑制那个警报,然后聚焦那个窗口。我试着给它-silent命令行选项,但它不起作用。另外,如果nsiProcess无法启动,它不会在observer中告诉我错误原因,它总是说finished( 以下是可从scratchpad运行的复制粘贴代码: var exe = FileUtils.getFile('XREExeF', []); //this gives path to executable

下面的代码使用nsIProcess和runAsync启动配置文件。如果它在使用中,它将显示一个警报。我想抑制那个警报,然后聚焦那个窗口。我试着给它
-silent
命令行选项,但它不起作用。另外,如果nsiProcess无法启动,它不会在observer中告诉我错误原因,它总是说finished(

以下是可从scratchpad运行的复制粘贴代码:

var exe = FileUtils.getFile('XREExeF', []); //this gives path to executable
var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(exe);

var obsToLaunchProfAfterCreate = {
    observe: function (aSubject, aTopic, aData) {
        console.info('incoming obsToLaunchProfAfterCreate: aSubject = ' + aSubject + ' | aTopic = ' + aTopic + ' | aData = ' + aData, {
            aSubject: aSubject,
            aTopic: aTopic,
            aData: aData
        });
    }
};

var args = ['-P', 'default', '-no-remote'];
var a = process.runAsync(args, args.length, obsToLaunchProfAfterCreate);
console.log('a', a)
我正在查看代码,似乎没有办法消除错误

您可能仍然使用
nsIToolkitService.profiles
,然后对命名的配置文件使用
profile.lock()
,或者对任意配置文件使用
nsIToolkitService.lockProfilePath()
,以查看在实际生成进程之前是否可以打开配置文件。不知道如何正确使用这些内容,只需进行一些尝试和错误;)

至于
nsiproces
:好吧,该进程已成功创建,否则它不可能显示警告对话框;)因此,在这种情况下,难怪
过程完成了
,而不是
过程失败了
<代码>进程失败仅当操作系统无法创建进程或进程退出时(当操作系统无法创建进程时,操作系统通常仅返回该代码)才会被调度

要检查一般错误,请使用以下内容:

if (!(subject instanceof Ci.nsIProcess) || subject.exitValue != 0) {
  // error handling;
}
(有关退货退出代码的相关流程,请参阅文档)

不幸的是,当Firefox由于锁定配置文件Firefox而退出时,因此不幸的是,您无法专门检查对话框。。。
所以回到在生成进程之前检查锁的想法。

谢谢,伙计,我试图在尝试打开之前避免测试锁。因为我需要捕捉的另一个错误是由于文件损坏而无法启动配置文件。您肯定是对的,尽管该锁用来捕获是否在使用中:损坏配置文件的一个明显方法是删除其根目录,但这是唯一可能损坏配置文件并导致“找不到配置文件”错误的方法(我试图在启动配置文件之前避免运行lockProfile测试的另一个原因是因为它是同步的:(