Я пытаюсь выполнить деинсталлятор (написанный на AppleScript) через AuthorizationExecuteWithPrivileges. Я настраиваю свои права после создания пустой аутентификации реф так:Запуск AppleScript с повышенными привилегиями от Objective C
char *tool = "/usr/bin/osascript";
AuthorizationItem items = {kAuthorizationRightExecute, strlen(tool), tool, 0};
AuthorizationRights rights = {sizeof(items)/sizeof(AuthorizationItem), &items};
AuthorizationFlags flags = kAuthorizationFlagDefaults |
kAuthorizationFlagExtendRights |
kAuthorizationFlagPreAuthorize |
kAuthorizationFlagInteractionAllowed;
status = AuthorizationCopyRights(authorizationRef, &rights, NULL, flags, NULL);
Позже я называю:
status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, (char *const *)args, NULL);
На Snow Leopard это работает отлично, но на Leopard я получаю следующее в системный журнал .log:
Apr 19 15:30:09 hostname /usr/bin/osascript[39226]: OpenScripting.framework - 'gdut' event blocked in process with mixed credentials (issetugid=0 uid=501 euid=0 gid=20 egid=20)
Apr 19 15:30:12: --- last message repeated 1 time ---
...
Apr 19 15:30:12 hostname [0x0-0x2e92e9].com.example.uninstaller[39219]: /var/folders/vm/vmkIi0nYG8mHMrllaXaTgk+++TI/-Tmp-/TestApp_tmpfiles/Uninstall.scpt:
Apr 19 15:30:12 hostname [0x0-0x2e92e9].com.example.uninstaller[39219]: execution error: «constant afdmasup» doesn’t understand the «event earsffdr» message. (-1708)
После исследования этого в течение нескольких часов мое первое предположение, что Leopard как-то не хочет делать то, что я делаю, потому что он знает, что она находится в УИП ситуации и блокирует вызовы, которые запрашивают або ut пользовательские вещи в applescript.
Я все об этом не так? Я просто хочу, чтобы запустить эквивалент "Судо/USR/BIN/osascript ..."
Edit:
FWIW, первая линия, которая вызывает "ошибка выполнения" является:
set userAppSupportPath to (POSIX path of (path to application support folder from user domain))
Однако даже с пустым скриптом (при запуске argv, end run и все-таки) я до сих пор получаю сообщение «gdut».
Вы действительно не должны писать инсталляторы в AppleScript. Пожалуйста, выберите любой другой язык. –
Yup, я закончил перевод всего на obj-c. – devguydavid