2009-07-22 28 views
3

私は、Cocoaアプリケーションでアンインストールスクリプトを実行していますが、launchctlコマンドが実行されないことに気付きました。AuthorizeExecuteWithPrivilegesでshスクリプトを実行

他のすべてのスクリプトコマンドが正しく実行され(それは端末内に細かいアンロード)を受けるので、これは(「デーモンの名前を」アンロードにlaunchctl sudoを含んでいる)スクリプトを呼び出すコード

//pFileName is the name of the File 

NSString* pPath = [pCurrentBundle pathForResource:pFileName ofType:@"sh"]; 
char* const ppArgs[] = {const_cast<char*>([pPath fileSystemRepresentation]), NULL}; 

OSStatus status = AuthorizationExecuteWithPrivileges(m_AuthorizationRef, "/bin/sh", kAuthorizationFlagDefaults, ppArgs, NULL); 

の一部です。私は、TN2083の状態と同じ特権をroot(両方ともEUIDとRUIDが0)として持っていないと推測しています。

答えて

0

最初に、既にルートとして実行しているスクリプト内でsudoを使用しないでください。デフォルトのMacセットアップでは問題はありませんが、ユーザーがsudoersをどのように設定したかによって異なります。これは依然として私の最大の疑念である。

次に、実行時にコンソールにエラーメッセージが表示されますか?あなたは他のものが動いていると言いました。彼らはこれの前後にいますか?このスクリプト行からUNIXエラーの結果を確認していますか?

Creating launchd Daemons and Agentsと読んでいるとします。

あなたはスクリプトが実行されていると言います。実際には拡張子.shがあり、pFileNameには ".sh"が含まれていないと仮定します。

TN2083はAuthorizationExecuteWithPrivilegesを参照しません。 TN2083州としてはどういう意味ですか?

あなたは、スクリプトにsetuidビットが設定されていないと仮定しますが、正しいですか?それはAuthorizationExecuteWithPrivilegesで問題を起こすでしょう。

+0

あなたの前提はすべて正しいです。私は 'rm file'をlaunchctlの前と後に持っていました。問題に気がついたときには正しく実行されなかったコマンドはlaunchctlだけでした。 また、TN2083について言及すると、launchctlが実行されるためには「EUIDとRUIDが存在しています」0を指していました。 スクリプトにsetuidビットを設定していません。 他のプロジェクトでアンインストールスクリプトが正常に動作しています。しかし、私はこれをココアアプリに移植したとき、これがlaunchctlに問題が見られるようになったのです。 –

+0

あなたは 'sudo'を削除しようとしましたか?あなたはすでにこの時点でルートしています。 –

+0

ええ、私は両方を試してもまだ運がありません。 –

関連する問題