0

Mac(マウンテンライオン)でファインダー用のプラグインを作成しましたが、完全に機能しますが、バンドルをsudoで実行する必要があります。次に、このバンドルを実行するパッケージ(Packagemaker)を作成しましたが、失敗しました(正しくインストールされ、デスクトップアイコンをクリックして実行すると失敗しました。sudoを使用してコマンドラインで実行すると、機能します)。ドロップボックスをインストールするのと同じようにこの問題を修正する方法を知っている人はいますか(そして同期アイコンが表示されます)

4

1 に答える 1

3

あなたが直面している問題は、内部的に、mach_inject が関数 task_for_pid を呼び出すことです。

この関数は、指定されたプロセス pid のカーネル タスク ID を返します。セキュリティ上の理由により、Apple は現在、この関数をrootまたはprocmodグループのいずれかのメンバーであるユーザーからのみ使用できるようにする必要があります。これは、sudo の実行が効果的な理由を説明しています。

これを自分で使用するためだけに開発している場合、最も簡単な方法は自分自身を procmod グループに追加することです。ただし、アプリケーションを配布する場合は、インストーラーがプログラムをインストールして、root または procmod グループのメンバーとして実行されるようにする必要があります。

1 つの可能性は、アプリケーションを 2 つの部分に分割することです。2 番目の部分は、SMJobBlessを使用して昇格された特権で実行するように登録されます。Objective-C でプログラミングしない場合でも、実際に必要な SMJobBless の部分は単なる C 関数呼び出しであるため、心配する必要はありません。与えられたコード例AuthorizationCopyRightsSMJobBlessを探してください。

または、アプリケーションがコード署名されている場合は、それも機能するはずですが、私は自分で試したことはありません. あなたはそれについてここで読むことができます.


OS X 10.11 (El Capitan) の時点でtask_for_pidは、資格のある関数呼び出しであり、証明書に特定の資格があるソフトウェアでのみ使用でき、サードパーティの開発者は使用できなくなりました。

これにより mach_inject が中断され、SIP ( System Integrity Projection ) が有効になっている間、別のプロセスの mach タスクを取得することが難しくなります。

于 2013-10-07T10:27:04.487 に答える