2010-05-13 10 views
1

J'ai créé l'application Cocoa qui est un type d'agent de lancement. Pour distribuer cela, j'ai créé un paquet qui installe l'application et copie le fichier plist launchagnet dans/Libraries/LaunchAgents.Cocoa Agent de lancement s'enregistrant après l'installation

Maintenant, le problème est après l'installation, je veux que cette application soit exécutée dans le contexte de l'utilisateur immédiatement sans déconnexion/redémarrage. Si je l'enregistre avec "launchctl" du programme d'installation, en utilisant le script post-installation, il s'exécutera dans le contexte racine, car le programme d'installation s'exécute dans le contexte racine.

Toute suggestion sur la façon dont l'agent s'enregistre lui-même dans launchctl et s'exécute dans le contexte de l'utilisateur.

Répondre

3

Essayez ceci dans le script postinstall:

/usr/bin/sudo -u $USER /bin/launchctl load -S Aqua /Library/LaunchAgents/com.yourcompany.launchagent.plist 

Notez que si plusieurs utilisateurs sont connectés via la permutation rapide d'utilisateur, ce ne sera activée que votre agent de lancement pour l'utilisateur qui l'a installé.

Il existe un moyen non pris en charge pour que cela fonctionne avec plusieurs utilisateurs connectés sous Mac OS X 10.5/10.6, en utilisant launchctl bsexec; Voir this pour plus d'informations.

+0

J'ai essayé cela mais cela me donne l'erreur: "launch_msg(): socket n'est pas connecté" .. une idée? – Unicorn

+0

Ça a marché pour moi. Vous ne devriez recevoir ce message que si vous essayez d'installer en tant qu'utilisateur différent de celui qui s'est connecté (http://lists.macosforge.org/pipermail/launchd-dev/2009-June/000553.html). –

+0

J'ai aussi essayé à partir du terminal, en donnant directement le nom de l'utilisateur au lieu d'utiliser la macro env, obtenant la même erreur. C'est le seul utilisateur actuellement connecté. Vous ne savez pas ce qui ne va pas. Je pense que je pourrais avoir besoin d'utiliser la déconnexion après l'installation. Merci de votre aide. – Unicorn