3

Xcode を使用してコマンド ライン ツール アプリを作成しました。そのアプリでは、ここで提案されているように、NSWorkspace を使用して別のアプリケーション バンドル (.app) を起動しました。 MacOsX: 「コマンド ライン ツール」タイプのアプリからアプリケーション (.app) を起動する方法

launchctl を使用してそのコマンド ライン ツール アプリをデーモンとして起動しようとするまで、すべて正常に動作しているようです。デーモンが現在ログインしているユーザーとして実行されている場合、コマンド ライン ツール アプリは外部アプリを問題なく起動します。デーモンがルートとして実行されている場合、コマンド ライン ツール アプリは外部アプリを起動できません。デーモンがルートとして実行されている場合、NSWorkspace を使用してアプリを開くことができないようです。

ルートとして実行されているデーモンから別のアプリを開く正しい方法を知っている人はいますか?

4

3 に答える 3

2

これは、StackOverflow の回答で実際に扱うには複雑すぎるテーマです。簡単に言えば、デーモンはアプリケーションを確実に起動できないということです。長い回答については、Apple のTechnical Note TN2083: Daemons and Agentsをお読みください。

于 2013-03-20T07:52:52.250 に答える
2

これは、実行している MacOS 内のセキュリティ制限である可能性があります。

私が提案するのは、現在ログインしているユーザーのユーザーIDに(setuidを介して-コード署名されたアプリの外では行わない)コード署名された「ヘルパーツール」を作成してから実行することですそのユーザー コンテキストでアプリを起動する NSWorkspace トリック。

ただし、ヘルパー ツールの作成は簡単ではありません。大まかな概念は、Apple のAuthorization Services Programming Guideで説明されています。

Apple の「SMJobBless」サンプル コードを見てください。これは、ユーザー権限を設定できるヘルパー ツールをインストールし、そのヘルパー ツール コードを変更してアプリを起動する方法を示しています。

于 2013-03-20T03:38:21.950 に答える
0

このリンクに記載されているコードを使用して「コンソールユーザー」の uid と gid を取得することで、最終的に機能するようになりました:
https://superuser.com/questions/180819/how-can-you-find-out-the-currently- os-x-gui にログインしたユーザー

このリンクは、 「コンソール ユーザー」の uid と gid の使用方法SCDynamicStoreCreate()と取得方法の例を示しています。SCDynamicStoreCopyConsoleUser()

uidとgidを取得した後、NSWorkspaceを使用してアプリを開く前に、uidとgidをコンソールユーザーのものに設定するだけで、うまくいきました。

于 2013-04-04T23:54:16.983 に答える