2017-09-21 67 views
1

我們開發了一個類似於防病毒的應用程序,它具有後臺進程以及用於與用戶交互的GUI(注意:後臺進程將作爲單獨的GUI執行線)。在Mac上使用LaunchAgent運行代理

我們的應用程序在部署時在MacOS以下是要求:

  1. 應該使用LaunchAgent爲每個登錄用戶推出的應用程序的GUI部分,即使這些用戶,他們的帳戶創建之後安裝該軟件。

  2. 用戶無需管理員權限應該無法通過任何手段阻止GUI程序(例如,launchctl卸載/ bootout或活動監視器)

我們所做到目前爲止

我們在/Library/LaunchAgents中創建了一個plist文件,並使用launchctl load -F com.myfile.plist加載該文件,該文件成功加載,並且由於範圍設置爲Aqua,因此用戶在代理程序中的任何時間都可以開始。

問題,我們都面臨着

  • 非管理員用戶可以使用launchctl

注意登錄後停止加載代理

  • 據我們瞭解,我們可以將我們的應用程序放入每個用戶的「登錄項目」中。我們不喜歡這種解決方案,因爲我們必須爲每個用戶執行此任務,並且如果在安裝後創建了新用戶,他/她將不會自動在其登錄項中擁有我們的應用程序。此外,用戶似乎可以訪問並能夠從其登錄項列表中刪除應用程序。
  • 該應用程序有一個GUI,因此我們無法啓動它作爲一個無頭守護進程。這是一個JavaFX應用程序,它使用許多Swing調用,因此它必須有權訪問Aqua會話。

關於如何滿足部署要求的任何想法?

回答

0

我會把GUI中的plist放在/ Library/LaunchAgents中,並將KeepAlive鍵添加到plist文件中。 LaunchDaemons中的後臺非GUI部分也包含KeepAlive Key。

所以每個用戶都可以通過ActivityMonitor結束這個過程,但是在結束之後它會立即重新啓動。

只有管理員用戶可以通過運行「sudo launchctl unload com.myfile.plist」或「sudo launchctl unload -w com.myfile.plist」將其永久禁用。