2017-08-10 8 views
4

サービスに付属のプログラムを作成しています。私がこれまで行ってきたことは、自分のプロセスに昇格したタスクを実行できるヘルパーツールを作成し、XPC経由で通信できることです。サービスを有効にしたり、無効にしたり、プログラムを起動したりするには

私のプログラムにはサービスがバンドルされており、ヘルパーツールを使用してこのサービスをインストールして起動/停止したいので、私のプログラムは設定で「システムでサービスを開始」チェックボックスを持つことができます。

サービスのplistを正常にコピーできますが、サービスをプログラムで有効化、無効化、開始、または停止する方法が見つかりません。私はsystem("launchctl load /path/to/service.plist");を呼び出す解決策はかなり醜いと思います。目的を達成するために目的Cに何らかの仕組みがありますか?

+0

https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingXPCServices.html#//apple_ref/doc/uid/10000172i-SW6-SW1あなたのニーズを満たしていますか? –

+0

それはありません。私はLaunchAgentではなく、LaunchDaemonに必要です。 – Nidhoegger

答えて

1

アップルでは、​​起動サービスを開始、停止、有効にするための非推奨のC APIがlaunch.hにあります。 APIのソースコード彼らのオープンソースサイトにある:

#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は意義ではない - 私はランダムでそれを選んだ:https://opensource.apple.com/source/launchd/launchd-442.26.2/liblaunch/

ここLittleSnitchUIAgentサービスを開始するのlaunchdを要求するいくつかのサンプルコードがあります私の地元のサービス一覧から。私はサンプルを真っ直ぐに保つためにエラーチェックを残しました。

launchd man pagesDaemons and Services Programming Guideに非常に近い研究を与えることをお勧めします。 Launchdは、タイマー、ソケット接続、システムに追加されるデバイス、その他多くのもののほとんどすべてに対応してプロセスを開始できます。実際には自分のサービスを管理する必要はほとんどありません。私はこれを確認することができませんでしたが、なぜ彼らはAPIを非難したのだろうと思う。

+0

この種の情報をありがとう。私は実際にサービスへのXPC接続を開くことによって今それを行い、launchdは接続時にオンデマンドで起動します。 – Nidhoegger

関連する問題