Несмотря на то, что API был открыт с Mac OS X Leopard, неожиданно и, к сожалению, очень мало документации о том, как правильно использовать SMJobBless()
для создания привилегированных вспомогательных инструментов. Есть много ошибок, даже при копировании кода непосредственно из образца Apple. К счастью, я нашел свой путь вокруг этого и стал основой для моего вспомогательного инструмента.
Однако, казалось бы, SMJobBless()
только благословляет инструмент и копирует его, но не запускает его. Я включил код в свой вспомогательный инструмент main()
, который должен выполняться, но не (поскольку NSLog()
необъяснимо не работает - в соответствии с крошечным битом информации, которую я нашел - я пробовал syslog()
некоторые строки типа "Hello world", но на системной консоли ничего не отображается). Нет никаких указаний на то, что вспомогательный инструмент запускается вообще.
Документация в основном бесполезна. Он просто говорит, что после вызова SMJobBless()
вспомогательный инструмент "готов", без указания того, что означает "ready" even.
Кроме того, образец Apple не содержит кода взаимодействия между процессами и не объясняет, как взаимодействовать с вспомогательным инструментом. Используете ли вы распределенные объекты? Мах портов? Кто знает? Там нет официального слова о том, как это сделать.
Итак, есть ли у кого-нибудь информация о том, как это сделать? Я подтвердил, что инструмент-помощник установлен, и работает проверка подлинности, но я просто не могу понять, как запустить вспомогательный инструмент и обмениваться с ним - там просто такой пробел в документации, что это загадка на данный момент. Это очень расстраивает; Я не могу быть единственным с этой проблемой (но об этом нигде не упоминается), а SMJobBless()
явно работает как-то, так как это использует Apple.
(Пожалуйста, не упоминайте AuthorizationExecuteWithPrivileges()
. Я не использую его: он устарел, обязательно уйдет, и это серьезное отверстие безопасности. Нет, спасибо.)