【问题标题】:Is it possible to programmatically create and configure an agent/daemon in launchd Cocoa/OSX?是否可以在launchd Cocoa/OSX 中以编程方式创建和配置代理/守护进程?
【发布时间】:2014-09-11 15:54:05
【问题描述】:

期望的场景是: 任务设置为每天凌晨 2 点运行,用户希望每天下午 6:00 运行任务。他启动了一个应用程序并对其进行了更改。

我已经成功创建了一个代理,它在每个给定的日历日期运行一个任务。但是我需要用户可以使用应用程序随意配置这些日期。是否可以以编程方式创建/启动/更新代理/守护程序以在启动下运行?如果是,我该怎么做?

【问题讨论】:

  • 您是否遇到了应用沙盒问题?因为几年前的谷歌搜索结果正是这种没有沙盒和权利。无论如何它是fairly impossible with sandboxing
  • 不知道有没有办法让通知在特定时间醒来?然后,您可以让您的应用程序在附件模式下激活并执行非 GUI 计划任务。我wrote a bunch about accessory mode here。拥有一个在沙盒环境中同时运行 GUI 和后台任务的可执行文件会让您的事情变得更容易。如果您想像在另一个问题中提到的那样使用核心数据,“帮助”应用程序会很痛苦。
  • Stevesliva,非常感谢您分享您的经验。具体来说,我的情况是需要使用来自存储的 CoreData 数据库(保存在 ~/Library/Application Support/[MyApp] 目录中)的动态/可更新参数运行后台任务。现在,我制作了一个命令行工具项目作为执行任务。我正在研究代理/守护进程的工作方式。我还没有弄清楚如何以动态方式正确链接 .plist 文件和 exec 文件。我目前的方法是尝试在 ~/Library/LauchAgents 中读取/写入 plist 文件,但它没有打开...
  • 真正的问题是什么?是不是你的程序没有~/Library/LaunchAgents 目录的写权限?
  • 嗨梅林,感谢您的回复。刚刚想出了如何让事情在这里工作。最后,真正的问题是我:我刚刚开始开发 OSX,很多事情对我来说还是未知数。我将 .list 文件放入 system/root 文件夹。

标签: macos cocoa daemon agent launchd


【解决方案1】:

刚刚想出了如何让事情发挥作用。我试图将代理写入系统/根目录,并没有注意到它。

我刚刚使用以下代码在登录的用户代理文件夹中创建了 .plist 文件:

// create the plist agent file
NSMutableDictionary *plist = [[NSMutableDictionary alloc] init];

// set values here...

// saves the agent plist file
NSString *userLaunchAgentsPath = [[NSString alloc] initWithFormat:@"%@%@%@", @"/Users/", NSUserName(), @"/Library/LaunchAgents/myagent.plist"];
[plist writeToFile:userLaunchAgentsPath atomically:YES];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多