Script pour connaitre les applications installées
Bonjour,
Je tente de faire un script qui liste les applications installées (qui en filtrera certaines dans un second temps et qui enverra la liste par mail dans un troisième).
J'ai récupéré ce script que j'ai commencé à modifier. Il fonctionne très bien. Sur un dossier de test avec 4 5 dossiers il m'en fait bien la liste. Malheureusement, quand je sélectionne le dossier application le script ne s'arrête plus, le Finder ne répond plus et je suis obligé de le forcer à quitter...
voila le script:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
set votreChoix to choose folder
set listeNoms to ""
tell application "Finder"
set liste_Dossiers to every folder of entire contents of folder (votreChoix as alias)
set thePath to every folder of entire contents of folder (votreChoix as alias)
if (count liste_Dossiers) is not 0 then
repeat with i from 1 to (the count items of liste_Dossiers)
set nom to name of item i of text items of liste_Dossiers as text
set listeNoms to listeNoms & nom & return
end repeat
set chemin_Fichier to (votreChoix as text) & " Fichiers.txt" as text
try
set chemin_Fichier to open for access chemin_Fichier with write permission
set eof chemin_Fichier to 0
write listeNoms starting at eof to chemin_Fichier
close access chemin_Fichier
on error
close access chemin_Fichier
end try
end if
end tell |
message d'erreur:
error "Erreur dans Finder*: Délai dépassé pour un AppleEvent." number -1712
Je ne voit pas ce qui le gène :(
Si il y a une autre solution ou si je fais une erreur dans mon script, je ne vois pas...
D'avance merci pour votre aide :)
lister les application installées
Bonsoir CaraLePoke,
La liste des applications installées sur ton Mac est enregistrée dans la base de données système Launch Services. C’est cette base qui est appelée pour trouver l’application à ouvrir lorsque tu ouvres directement un document.
Cette base contient aussi les registres des types de fichiers.
Cette base de données contient toutes les références aux applications installées ou ayant été installées sur ta machine.
La commande Unix lsregister permet une extraction (dump) de cette base de donnée.
Cette commande est accessible suivant le chemin ci-dessous (Mac OS X 10.4, 10.5 et 10.6)
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister
Je n'ai pas de 10.7 ou 10.8, mais cela ne devrait pas être très différent.
Le résultat de cette commande est un peu complexe, mais avec la commande Unix « grep » on peut en extraire les « bundle » qui sont en fait les applications. Pour info, la commande Unix grep est une sorte de filtre de recherche qui permet de n’afficher en résultat que ce qui contient ce que tu cherches (je simplifie !)
Voici la commande Unix à utiliser :
Code:
lsregister -dump | grep --after-context 1 "^bundle" | grep --only-matching "/.*\.app"
Le résultat est une liste des applications (une app par ligne, donc par paragraphe) avec leur chemin Unix (avec des "/" pour les dossiers et sous dossiers)
Il suffit alors de récupérer les noms des applications en utilisant l’instruction « info for ». L'instruction "info for" génèrera une erreur si le fichier n'existe plus...c'est parfait car on ne souhaite que les applications installées aujourd'hui et pas celles supprimées depuis !
Je t'ai fait un AppleScript utilisant cette commande.
J'y ai ajouté un filtre supplémentaire car je pense que tu sous-estimes les applications présentes sur ton Mac. En effet de nombreux sous dossiers système contiennent des applications (en particulier dans coreservices) que tu ne souhaites sans doute pas conserver comme véritables applications.
Par exemple, la commande lsregister indique aussi les Applescript enregistrés en application...
Libre à toi de supprimer les lignes de ce filtre. Il limite les applications à celles installées dans les dossiers Applications et Utilitaires.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| property Chemin_LS : "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister"
--defini les dossiers à conserver : ici Applications et Utilitaires
tell application "System Events"
set D_Application to (path to applications folder) as string
set D_Util to (path to utilities folder) as string
end tell
set Dos_OK to {D_Application, D_Util}
-- lit la base de données des applications
set Les_Chemins to every paragraph of (do shell script Chemin_LS & " -dump | grep --after-context 1 \"^bundle\" | grep --only-matching \"/.*\\.app\"")
--filtre la liste des applications seulement avec les fichers qui existent et dont le dossier est dans la liste Dos_OK
set Liste_Applis to {}
repeat with Le_Chemin in Les_Chemins
try
tell application "Finder" to set Dos to (container of ((Le_Chemin as POSIX file) as alias)) as string
if Dos is in Dos_OK then -- test si l'application est dans un dossier à garder
copy displayed name of (info for (Le_Chemin as POSIX file)) to end of Liste_Applis
end if
end try
end repeat
-- juste pour montrer le résultat :
set X to choose from list Liste_Applis with title "Liste des Applications" |
J'espère que les commentaires sont clairs.
Cordialement