SMJobBless 失败,CFErrorDomainLaunchd 代码 9

SMJobBless failed with CFErrorDomainLaunchd Code 9

有人知道那个错误代码是什么意思吗? 我收到此 return 代码值的 SMJobBless 错误。

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

我用谷歌搜索,在博客帖子、Apple Docs 和此处那里查找答案,但找不到答案这是什么以及如何解决它。人们说(在一些支持论坛上,重新安装 OS X 对他们有帮助)。

几周前我正在进行的项目就发生过这种情况,唯一帮助我修复它的是更改我的辅助工具的名称。现在又发生了。

同时我的代码在其他计算机上运行,​​只有我的工作站受到此问题的影响。

更新: 重命名后,它再次工作。现在我的系统上有两个辅助工具包标识符 "banned" :-(

更新二: 它也发生在其他计算机上:-(

在我的例子中是错误

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

意味着帮助工具已添加到此处的永久禁用服务列表:

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

我说的是 Yosemite,older/younger OS 版本可能在这里(我没查过):

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

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

似乎无法从 disabled.plist 文件中删除服务。每次重新启动时,文件都会从 launchd 缓存中恢复,并且刷新缓存似乎尚未实现。只有永远启用服务才有可能,因此 launchd 不会阻止它启动。

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

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

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) 比 "The operation couldn’t be completed" 更有意义。