objective-c – 在macOS中以编程方式启用,禁用和启动服务
我正在编写一个附带服务的程序.到目前为止我所做的是创建一个帮助工具,可以为我的进程运行提升的任务,并可以通过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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |