0

有没有办法知道当特权帮助工具安装为启动守护程序并通过SMJobSubmit().

我有一个以特权方式执行某些任务的应用程序,它使用此处提到的 SMJobSubmit API 。

现在为了知道任务是否成功,我必须执行以下操作之一。

  1. 最好的选择是获取运行的可执行文件的返回码。
  2. 另一种选择是如果我可以在我的应用程序和launchd之间创建一个管道。
  3. 如果以上两个都不可能,我将不得不求助于一些技巧,比如在 /tmp 位置写入文件并从我的应用程序中读取它。

我猜 SMJobSubmit 在内部将带有 launchdaemon 字典的可执行文件提交给 launchd,然后由它负责执行。那么有没有一种方法可以查询launchd以找出带有标签“mylabel”的可执行文件运行的返回码。

4

1 回答 1

1

没有办法直接做到这一点。

SMJobSubmit是一个复杂任务的简单包装器。尽管异步启动任务,它也会同步返回。因此,虽然它可能会在未能提交作业时给您一个错误,但如果它成功提交了无法运行的作业,则无法找到它。

因此,您将必须明确编写一些代码来从您的助手与您的应用程序进行通信,以报告它已启动并正在运行。

如果您已经构建了一些通信机制(信号、文件、Unix 或 TCP 套接字、基于 HTTP 的 JSON-RPC 等等),那么就使用它。

如果您从头开始设计某些东西,XPC 可能是最好的答案。你不能使用 XPC 来启动你的助手(因为它是特权的),但是你可以通过注册一个 Mach 服务并调用 xpc_connection_create_mach_service 来手动创建一个连接。

于 2012-09-19T23:59:34.557 回答