【问题标题】:How to catch error when firefox startup fails with nsIProcess当 nsIProcess Firefox 启动失败时如何捕获错误
【发布时间】:2014-05-15 05:24:18
【问题描述】:

以下代码使用 nsIProcess 和 runAsync 来启动配置文件。如果它正在使用中,它会抛出一个警报。我想抑制那个警报,只关注那个窗口。我尝试给它-silent 命令行选项,但它不起作用。此外,如果 nsiProcess 无法启动它永远不会在观察者中给我错误原因,它总是只是说完成。 :(

这是可从暂存器运行的复制粘贴代码:

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)

【问题讨论】:

    标签: javascript firefox-addon command-line-arguments xpcom


    【解决方案1】:

    我查看了nsAppRunner 代码,似乎无法消除错误。

    您可能仍然使用nsIToolkitService.profiles,然后profile.lock() 用于命名配置文件,或nsIToolkitService.lockProfilePath() 用于任意配置文件,以查看是否可以在实际生成进程之前打开配置文件。不知道如何正确使用这些东西,只是做一些反复试验;)

    至于nsIProcess:嗯,进程已成功创建,否则它无法显示警告对话框;)所以在这种情况下,难怪you get process-finished 而不是process-failedprocess-failed 只会在操作系统创建进程失败或进程以(int32_t)exitCode < 0 退出时被调度(操作系统通常会在创建进程失败时返回)。

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

    if (!(subject instanceof Ci.nsIProcess) || subject.exitValue != 0) {
      // error handling;
    }
    

    (有关返回退出代码的相关过程,请参阅文档)。

    不幸的是,当 Firefox 因锁定配置文件 Firefox still does return an exit code of 0 而退出时,很遗憾您无法专门检查对话框... 所以回到在产生进程之前检查锁的想法。

    【讨论】:

    • 谢谢,我试图避免在尝试打开之前测试锁。因为我需要捕获的另一个错误是如果由于文件损坏而无法启动配置文件。你绝对是对的,虽然那个储物柜是用来捕捉它是否在使用中的:github.com/Noitidart/Profilist/blob/master/bootstrap.js#L414
    • 破坏配置文件的明显方法是删除其根目录,但这是破坏配置文件并导致“找不到配置文件”错误的唯一方法。 :(
    • 我试图避免在启动配置文件之前运行 lockProfile 测试的其他原因是因为它是同步的。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2020-07-22
    • 2019-06-30
    • 1970-01-01
    • 2012-01-22
    • 2013-05-19
    • 2019-10-31
    相关资源
    最近更新 更多