0

OS Xのインストーラーを作成しようとしています。rootが所有するディレクトリ(/ Applications、/ Library ...)に書き込めるように、セキュリティフレームワークのAuthorizationServicesを使用しています。次のコードは、管理者ユーザーでは正常に機能しますが、標準ユーザーでは失敗します。権限の作成はエラーメッセージなしで機能しますが、プロセスは引き続き低い権限で実行されます(上記の位置にファイルは書き込まれません)。

もちろん、認証には管理者ユーザーのログイン名/パスワードを使用しています。

    AuthorizationRef authRef;

    char rightName[] = "system.install.root.user";
    AuthorizationItem   kActionRight = { rightName, 0, 0, 0 };
    AuthorizationRights rights = {1, &kActionRight};
    AuthorizationFlags flags=kAuthorizationFlagExtendRights|kAuthorizationFlagInteractionAllowed;

    OSStatus err = AuthorizationCreate(&rights, 0, flags, &authRef);

    // [ write to a file in /Applications; doesn't work with standard users ]

    if (authRef != 0)
       AuthorizationFree(authRef, kAuthorizationFlagDestroyRights);     

AuthorizationExecuteWithPrivileges()を使用する例があることは知っていますが、これはOS X 10.7で非推奨になっているため、使用を避けたいと思います。私が間違っていること、またはルート権限を取得するために何をする必要があるかについて何か考えはありますか?

助けてくれてありがとう、

クリス

4

1 に答える 1

0

独自のインストーラーを作成する代わりに、PackageMaker を使用する必要があるかもしれません。これにより時間を節約できます...また、要件に応じて、バイナリを /Library に自動的にコピーする HelperTools を使用できます...

于 2012-04-30T11:08:18.053 に答える