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" 更有意义。
有人知道那个错误代码是什么意思吗? 我收到此 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" 更有意义。