3

私は、特にファイルにパッチを適用する必要がある 10.8+ 用のアプリを構築しています。この機能のために、私は「PrivilegedHelperTool」を作成し、KeepLive = YES RunAtLoad = YES としてインストールしました (したがって、常に実行されています)。また、GUI アプリ (メニューバー) との通信に XPC over mach を使用しています。

「PrivilegedHelperTool」がインストールされ、実行されているかどうかを確認できるようにしたいと思います。これまでのところ、インストールを確認する最善の方法は、/Library/LaunchDaemons/ で plist を探し、バイナリが / にあることを確認することですLibrary/PrivilegedHelperTools .

これは本当に最善の方法ですか?

また、PrivilegedHelperTool (root として実行) が root になっていないかどうかを確認する信頼できる方法が見つかりませんでした (例: sudo launchctl list)

launch.h (/usr/include/launch.h) http://brockerhoff.net/blog/2009/02/02/cocoa-musings-pt-3/を使用するラッパーを追加しました が、ユーザー プロセスと「プラグイン」が実行されていることを確認するためだけにエンドユーザーに権限を昇格させるのは間違っているようです。

私が期待できる最善の方法は、サービスと通信しようとすることであり、応答しない場合は「破損しているか実行されていない」と想定するというのは本当ですか? ( http://mac-os-forge.2317878.n4.nabble.com/Programmatic-interface-to-launchctl-and-some-other-questions-OS-X-10-5-tp189494p189496.html )

4

2 に答える 2

0

バックグラウンド ヘルパー デーモンをインストールするときは、root になる必要があります。したがって、インストーラーが適切な権限でデーモンをインストールするジョブを実行するか、アプリケーションを起動するときに、ユーザーに管理者として自分自身を承認するように依頼して、デーモンをオンザフライでインストールできるようにします。

これは、アプリケーションから root になるためのコード スニペットです。pkgから何かをインストールするときにも表示される通常のユーザー名/パスワードダイアログボックスでユーザーにプロンプ​​トを表示します。

OSStatus myStatus;
uid_t   uid = -1;
AuthorizationRights myRights;
AuthorizationFlags myFlags;
AuthorizationItem myItems[1];


uid = geteuid();
if(uid != 0)
{
    myItems[0].name = "com.whatever";
    myItems[0].valueLength = 0;
    myItems[0].value = NULL;
    myItems[0].flags = 0;
    myRights.count = sizeof (myItems) / sizeof (myItems[0]);
    myRights.items = myItems;
    myFlags = kAuthorizationFlagDefaults |
        kAuthorizationFlagInteractionAllowed |
        kAuthorizationFlagExtendRights |
        kAuthorizationFlagPartialRights;
    myStatus = AuthorizationCreate (&myRights, kAuthorizationEmptyEnvironment,myFlags,NULL);
}
于 2012-09-20T10:09:47.423 に答える