2009-06-14 11 views
4

Une question similaire à Locating bundles by identifier, mais différent problème:OS X: emplacement paquet par identifiant pour une application nouvellement installée

J'ai plusieurs applications qui ont besoin de localiser des faisceaux de l'autre par leur carte d'identité. Cela fonctionne toujours bien, sauf si je fais une installation complètement nouvelle de toutes mes applications. Dans de nombreux cas, il suffit de pointer le chercheur vers l'emplacement d'installation pour que les emplacements de regroupement soient connus, mais parfois même cela ne suffit pas; Je dois d'abord exécuter l'application avant que son ID de faisceau puisse être utilisé pour trouver le chemin. Je dois mentionner que j'utilise un programme d'installation qui copie les applications dans/Applications /, de sorte que le finder ne s'ouvre jamais lorsque j'installe les applications.

Il apparaît que lorsqu'un ensemble d'applications est nouvellement installé, il faut du temps au système avant de mettre à jour un registre interne qui mappe l'ID de l'ensemble à l'emplacement de l'ensemble. Ce que je voudrais savoir est:

  1. où sont ces correspondances entretenues et
  2. comment puis-je forcer à mettre à jour la carte

Répondre

2

Les applications du gestionnaire/espace de travail de système de fichiers/sont (?) géré dans la base de données des services de lancement. Je ne sais pas où cela est stocké, mais l'emplacement exact n'est pas pertinent, car il existe de meilleurs moyens d'atteindre votre objectif.

Vous pouvez mettre à jour manuellement la base de données Launch Services de plusieurs façons, mais personnellement, je pense que le faire par programmation serait plus facile, surtout dans votre situation. Dans ce cas, vous utiliseriez l'API Launch Services - plus précisément, j'examinerais en utilisant LSRegisterURL(), puisque cela semble atteindre ce que vous voulez faire.

Jetez un oeil à la Launch Services documentation pour plus d'informations sur l'enregistrement des applications dans la base de données et comment tout cela fonctionne en général.

+0

Merci pour le lien vers la documentation des services de lancement. J'ai déjà lu de grandes parties de cette documentation, mais j'ai manqué ce paragraphe. J'espérais une solution plus simple que d'utiliser LSRegisterURL(), comme exécuter un extrait d'AppleScript ou quelque chose, mais cela est assez proche pour que je l'accepte comme réponse. Merci. –

+0

Il existe un outil appelé "lsregister" enterré quelque part dans le cadre des services de lancement que vous pouvez utiliser comme alternative, mais je ne suis pas sûr que ce soit plus simple. – hbw

+1

htw: Je pense qu'il veut le faire à partir d'un script post-vol de l'installateur. Dans ce cas, exécuter un AppleScript serait plus simple. En outre, lsregister est uniquement documenté de manière oblique, donc je ne compterais pas sur elle existante. –

3

Une alternative, au cas où vous avez besoin, serait de rechercher à l'aide des API Spotlight avec la touche kMDItemCFBundleIdentifier:

pierre$39> mdfind "kMDItemCFBundleIdentifier == 'org.videolan.vlc'" 
/Applications/VLC.app 
/Applications/vlc-0.8.6c/VLC.app 

Spotlight est étroitement intégré avec le système, de sorte que les fichiers/dossiers indexés comme Dès qu'ils sont écrits sur le système de fichiers, vous ne devriez avoir aucun problème à ce que l'application n'ait pas encore été indexée. Bien sûr, vous devez être prêt à gérer plus d'une réponse ...