SMJobBless failed with CFErrorDomainLaunchd Code 9



有人知道这个错误代码是什么意思吗?我得到SMJobBless错误与此返回代码值。

Failed to bless helper: Error Domain=CFErrorDomainLaunchd Code=9 "The operation couldn’t be completed. (CFErrorDomainLaunchd error 9.)"

我在谷歌上搜索,在博客文章、苹果文档中寻找答案,到处都找不到答案,这是什么以及如何解决它。在一些支持论坛上,人们说重新安装OS X对他们有帮助。

它已经发生在我正在进行的项目几个星期前,唯一的事情,帮助我解决它,是改变我的辅助工具的名称。现在又发生了。

当我的代码在其他电脑上运行时,只有我的工作站受到这个问题的影响。

更新:重命名后,它又可以工作了。现在我有两个帮助工具包标识符被禁止了。在我的系统中:-(

)更新2:

这在其他计算机上也会发生:-(

)

使用High Sierra(可能之前,但我不知道从什么时候开始),有几个帮助启动ctl子命令。

launchctl print-disabled system

将列出显式禁用的服务。请务必检查false/true的值。

启用被禁用的服务

sudo launchctl enable system/com.example.service

此外,对于记录,在/System/Library/Frameworks/ServiceManagement.framework/Versions/A/Headers/SMErrors.h中可以读取:

enum {
        kSMErrorInternalFailure = 2,
        kSMErrorInvalidSignature,
        kSMErrorAuthorizationFailure,
        kSMErrorToolNotValid,
        kSMErrorJobNotFound,
        kSMErrorServiceUnavailable,
        kSMErrorJobPlistNotFound,
        kSMErrorJobMustBeEnabled,
        kSMErrorInvalidPlist,
};

,其中代码9 (kSMErrorJobMustBeEnabled)比"操作无法完成"更有意义。

在我的例子中,错误

Failed to bless helper: ErrorDomain =CFErrorDomainLaunchd Code=9 "操作无法完成。(CFErrorDomainLaunchd错误9。)"

表示辅助工具被添加到永久禁用的服务列表中:

/private/var/db/com.apple.xpc.launchd/disabled.plist

我告诉Yosemite,旧的/年轻的操作系统版本可能有它们在这里(我没有检查):

/var/db/launchd.db/com.apple.launchd.peruser.*user_id*/overrides.plist

在阅读了launchctl手册页之后,我发现"unload"子命令的参数-w为这个plist文件添加了服务。我在我的卸载脚本中使用了这个标志,这导致下次无法使用"祝福"工具。

似乎没有办法从已禁用的服务中删除服务。plist文件。每次重新启动时,都会从启动缓存中恢复文件,并且似乎还没有实现刷新缓存。只有永远启用服务,这样启动时才不会阻止它启动。

这里有几个链接,可能对遇到类似问题的人有用:

  • http://comments.gmane.org/gmane.comp.sysutils.launchd.devel/117
  • http://launchd.info
  • 一个伟大的应用程序来管理启动任务:http://www.soma-zone.com/LaunchControl/
  • man launchctl

最新更新