2013-03-18 2 views
3

Я новичок в объекте c, и у меня есть код-демона, который работает как root (общесистемное приложение) и общается с сервером. Время от времени сервер будет командовать этим корневым приложением для запуска дополнительного приложения, которое выполняется в контексте пользователя в журнале (без прерывания работы пользователя). У меня также есть приложение для пользовательского контекста. То, чего мне не хватает, - это понимание того, как мой корневой демон может запустить пользовательское контекстное приложение.запуск пользовательского контекстного приложения root-daemon по запросу

  1. Как может мой демон запустить его по требованию?
  2. Должен ли я использовать агент?
  3. Означает ли это, что агент будет запущен при запуске?

Я читал https://developer.apple.com/library/mac/#technotes/tn2005/tn2083.html, а также http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html, но чувствую, что что-то не хватает.

BTW - решение должно работать на 10,6, 10,7, 10,8 ...

Спасибо всем заранее: о)

+0

Можете привести пример, как вы это сделали, я работаю с одинаковыми потребностями – ColdSteel

ответ

0

Это будет работать, если вы знаете, вошедшего в систему пользователя.

sudo chown -R current_loggedin_user myApp 
sudo chmod u+s /Contents/MacOS/myApp 
system([@"open myApp" UTF8String]); //inside root process 

Если s группа разрешений имеет пользовательский набор битов (соответствующий U + S), то всякий раз, когда кто-то выполняет эту программу, процесс берет на себя привилегии, кто владеет им. Итак, current_loggedin_user является владельцем myApp, open запустит myApp в режиме current_loggedin_user.

s Установленные пользователем идентификаторы при выполнении и биты группы установки-на-исполнение.

u Пользовательские биты прав в исходном режиме файла.

Но если вы не авторизованы, вы получите следующую ошибку.

com.apple.launchd[1]: System: Bug: launchd_core_logic.c:8760 (24498):0 
com.apple.launchd[1]: System: job_mig_spawn() can't find its session! 
open[24459]: spawn_via_launchd() failed, errno=5 label=[0x0-0x274274]. 
rootProcess[23127]: LSOpenURLsWithRole() failed with error -10810 for the file /Applications/myApp.app/. 
+1

Благодарим за ответ. Я решил это, установив приложение контекстного приложения в качестве агента ... – NightRider