0

を使用して別のプロセスを起動するアプリケーション (正確には /Library/StartupItems 内のデーモン) をルートとして実行していsystem("open /Applications/MyAppName.app")ます。これは、特定のコンピューターで MyAppName が現在のユーザーの下ではなく、ルートとして実行されることを除いて、正常に機能します。

これがなぜなのか、アプリケーションを常に現在のユーザーとして起動する方法を理解しようとしています。

この問題は、Open/Active ディレクトリの組み合わせを実行しているエンタープライズ サイトで発生するようです。私はこれらのマシンへのアクセスがいくらか制限されているので、より多くの時間を要求する前に、少なくともいくつかの仮説を立てようとしています.

私が持っているもう1つの手がかりは、これらのコンピューターの少なくとも1つで、アクティビティモニターを開いて「Finder」プロセスを調べると、「ユーザー:」セクションにはユーザー名が表示されますが、ユーザーIDは表示されないということです(「(UID)」セクション完全に欠落しています)。

また、親プロセスは、ほとんどの標準アプリケーションのようにlaunchd (1)" " ではなく" " として表示されます。launchd (95)このlaunchdのインスタンスは、ログインユーザーとして実行されるlaunchdの他のインスタンスと比較して、コンピューターが起動されてルートとして実行されるたびに最初に起動される実行であると私は信じています。

明らかなセキュリティ上の懸念に加えて、同時にログインしている 2 人のユーザーに対して開いたり、表示したりできるように、アプリケーションを root として実行しないようにする必要があります。

これを引き起こしている可能性のあるもの、またはそれを解決する方法について何か考えがある人はいますか?

4

1 に答える 1

5

私はいくつかのコメントを持っています:

  1. デーモンを適切な launchd デーモンにする必要があります。つまり、/Library/LaunchDaemons に plist を貼り付けます。/Library/StartupItems廃止されました。http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.htmlを参照してください。

  2. おそらく、デーモンから直接 2 番目のデーモンを起動するべきではありません。おそらく別のデーモンにする必要があります。

  3. この技術に精通していることを確認してください。注: http://developer.apple.com/technotes/tn2005/tn2083.html . これは必読であり、複数の launchd プロセスが存在する理由を説明し、問題の原因について適切な手がかりを提供するはずです。

  4. 余談ですが、openは Launch Services の単なるラッパーであり、 を呼び出すのではなく、直接アクセスできますsystemopenしかし、私が言ったように、または Launch Servicesを使用して 2 番目のデーモンを起動するべきではありません。

デーモンが正確に何をするかについて詳細を投稿していただければ、最善の方法についてアドバイスできるかもしれません。たとえば、多くの場合、起動デーモンを継続的に実行するよりも、オンデマンドで起動する方が最適です。

于 2009-07-07T00:18:28.143 に答える