2012-04-30 6 views
0

Я пытаюсь создать установщик для OS X. Чтобы иметь возможность писать в каталоги, принадлежащие root (/ Applications,/Library ...) Я использую службы авторизации из системы безопасности. Следующий код отлично работает с пользователем администратора, но не работает со стандартным пользователем. Создание прав работает без сообщения об ошибке, но процесс по-прежнему выполняется с более низкими привилегиями (в указанной записи файл не записывается).OS X, приложение не может получить root preiliges при запуске со стандартного пользователя

Конечно, я использую имя пользователя/пароль администратора для аутентификации.

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, я предпочел бы не использовать его. Любая идея, что я делаю неправильно или что мне нужно сделать, чтобы получить права root?

Спасибо за любую помощь,

Chris

ответ

0

Может быть, вам нужно использовать PackageMaker вместо того, чтобы писать свои собственные установки. Это сэкономит ваше время ... И в зависимости от вашего требования вы можете использовать HelperTools, который будет автоматически копировать двоичные файлы в/Library ...

+0

Это для веб-мастера, поэтому PackageMaker на самом деле не вариант. Я посмотрю на HelperTools. – user1365581

+0

Что такое веб-мастер? – toohtik