gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:47:24 26 4
gpt4 key购买 nike

我正在编写一个带有服务的程序。到目前为止,我所做的是创建一个可以为我的进程运行提升任务并可以通过 XPC 进行通信的辅助工具。

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

我可以成功复制该服务的 plist,但我找不到任何方法以编程方式启用、禁用、启动或停止该服务。我认为调用 system("launchctl load/path/to/service.plist"); 的解决方案非常难看。 Objective-C 中是否有任何机制来完成此任务并获得成功或失败的结果?

最佳答案

Apple 在 launch.h 中有一个已弃用的 C API,用于启动、停止和启用 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 pagesDaemons and Services Programming Guide一项非常密切的研究。 Launchd 可以启动您的进程以响应几乎任何事情:计时器、套接字连接、添加到系统的设备等等。您实际上很少需要管理自己的服务。我无法证实这一点,但我怀疑这就是他们弃用该 API 的原因。

关于objective-c - 在 macOS 中以编程方式启用、禁用和启动服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45607232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com