在Mac上使用LaunchAgent运行代理

时间:2017-09-21 15:38:03

标签: macos

我们开发了一个类似于反病毒的应用程序,它既有后台进程,也有用户交互的GUI(注意:后台进程将由GUI作为单独的线程执行)。

以下是我们在macOS上部署时的应用程序要求:

  1. 应该使用LaunchAgent为每个登录的用户启动应用程序的GUI部分。即使是那些在安装软件后创建其帐户的用户。

  2. 没有管理员权限的用户不能以任何方式停止GUI进程(例如,launchctl unload / bootout或Activity Monitor)

  3. 到目前为止我们做了什么

    我们在/Library/LaunchAgents中创建了一个launchctl load -F com.myfile.plist文件,并使用launchctl加载了该文件,该文件成功加载,并且由于范围设置为Aqua,因此只要用户在代理中加入开始了。

    我们遇到的问题

    • 非管理员用户可以在使用//spaghetti code, will not work //1. Create MySQL Connection //2. loop through table foreach($row as $number=>$message) { $sms_sent = $client->messages->create( $number, array( 'from' => '+1xxxxxxxxxx', 'body' => $message, 'statusCallback' => "http://myapplication_callback_url" ) ); }
    • 登录后停止加载的代理

    备注

    • 我们知道我们可以将我们的应用程序放入"登录项目"每个用户我们不喜欢这个解决方案,因为我们必须为每个用户执行此任务,如果在安装后创建了新用户,他/她将不会自动在我们的登录项中安装我们的应用程序。此外,用户似乎可以访问并从登录项列表中删除应用程序。
    • 应用程序有一个GUI,因此我们无法将其作为无头守护进程启动。它是一个JavaFX应用程序,它使用许多Swing调用,因此它必须能够访问Aqua会话。

    有关我们如何满足部署要求的任何想法?

1 个答案:

答案 0 :(得分:0)

我会将GUI的plist放在/ Library / LaunchAgents中,并将KeepAlive Key添加到plist文件中。 LaunchDaemons中的Background非GUI部分也使用KeepAlive Key。

所以每个用户都可以通过ActivityMonitor结束这个过程,但它会在结束后立即重新启动。

只有管理员用户才能通过运行" sudo launchctl unload com.myfile.plist"来结束这个过程。或者" sudo launchctl unload -w com.myfile.plist"永久禁用它。