加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 在macOS中以编程方式启用,禁用和启动服务

发布时间:2020-12-16 07:21:45 所属栏目:百科 来源:网络整理
导读:我正在编写一个附带服务的程序.到目前为止我所做的是创建一个帮助工具,可以为我的进程运行提升的任务,并可以通过XPC进行通信. 我的程序捆绑了一个服务,我想使用帮助工具来安装和启动/停止此服务,这样我的程序就可以在设置中有一个“启动服务与系统”的复选框
我正在编写一个附带服务的程序.到目前为止我所做的是创建一个帮助工具,可以为我的进程运行提升的任务,并可以通过XPC进行通信.

我的程序捆绑了一个服务,我想使用帮助工具来安装和启动/停止此服务,这样我的程序就可以在设置中有一个“启动服务与系统”的复选框.

我可以成功复制plist用于服务,但我找不到以编程方式启用,禁用,启动或停止服务的任何方法.我认为调用系统的解决方案(“launchctl load /path/to/service.plist”);蛮丑的.目标C中是否有任何机制可以完成此任务并获得成功或失败的结果?

解决方法

Apple有一个弃用的C API,用于在launch.h中启动,停止和启用launchd服务. API的源代码位于其开源站点: https://opensource.apple.com/source/launchd/launchd-442.26.2/liblaunch/

这是一些示例代码,要求launchd启动LittleSnitchUIAgent服务:

#include <launch.h>

int main(int argc,const char * argv[]) {
    const char *job = "at.obdev.LittleSnitchUIAgent";
    launch_data_t resp,msg;
    msg = launch_data_alloc(LAUNCH_DATA_DICTIONARY);
    launch_data_dict_insert(
        msg,launch_data_new_string(job),LAUNCH_KEY_STARTJOB);
    resp = launch_msg(msg);
    launch_data_free(msg);
    return 0;
}

LittleSnitchUIAgent不是意义 – 我从我当地的服务列表中随机选择了它.我离开了样本中的错误检查以保持它直接前进.

如果你还没有我会建议给launchd man pages和Daemons and Services Programming Guide一个非常接近的研究. Launchd可以启动您的流程以响应几乎任何事情:计时器,套接字连接,添加到系统的设备等等.您实际上需要管理自己的服务是很少见的.我无法证实这一点,但我怀疑这就是为什么他们已经弃用了API.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读