Comment redemarrer le Finder avec "killall Finder"

Bonjour,
Pourquoi la commande Shell :
Sh.Execute (”killall Finder”)
Renvoie une erreur “Cette item n’existe pas” ?
Comment redamarrer le Finder pour qu’il puisse prendre en compte les modifications ?
Denis

Bonjour,

Plutôt que de forcer le Finder à quitter, pourquoi ne le faites-vous simplement pas redémarrer?

var ae As new AppleEvent(“aevt”,“quit”,“com.apple.finder”)

call ae.Send
Return True

C’est moins barbare et ça conservera les réglages de l’utilisateur (comme les nouvelles fenêtres ouvertes, etc.).

Merci pour l’astuce cependant je n’ai pas réussi à le faire fonctionner.
j’ai les messages d’erreur “Cet Item n’existe pas” sur 3 lignes (peut être les guillemets en cause ?)
ou il faut peut-être déclaré une variable quelques part (je débute sur Xojo) ?

J’ai testé d’autres approches :
Shell1.Execute (“Taskkill /IM Findex.app /F”)
ou
Shell1.Execute (“killall”, “finder.app”)
Ils s’exécutent bien mais le Finder ne semble pas se relancer…

Je continue a chercher…
Denis

Merci @Arnaud_N
Le code fonctionne, cependant, il ferme toutes les fenêtres du Finder et cache les icônes du Bureau !
Il me faut ré-appuyer sur l’icône du Finder dans le Dock pour réafficher les icônes du Bureau.
Alors qu’une commande terminal “Killall Finder”, relance le Finder proprement.
Au lieu de quitter, il n’y a pas plutot une commande de redemarrage (de type “aevt”, “restart” ou quelque chose d’équivalent) ?

var ae As AppleEvent
ae = New AppleEvent(“aevt”, “quit”, “com.apple.finder”)
call ae.Send

avec l’applescript editeur tu peux quitter le finder et le recherger

tell application “Finder” to quit

puis
tell application “Finder” to run

“à la main”

Attention: si vous avez le projet de vendre l’app dans le Mac App Store, tout applescript qui touche le finder est prohibé.

J’ai essayé ceci :
Shell1.Execute (“osascript -e 'Tell application ““Finder”” to quit “”” + “” + “”"’ -e ‘Tell application ““Finder”” to run’")
Le Finder Quitte bien mais ne se relance pas (idem que le script précédent) mais peut-être que la syntaxe n’est pas la bonne ?
Merci.

Non, ça ne serait pas logique. Un AppleEvent cible une application qui est en train de fonctionner. Mais l’application n’a pas les moyens de se relancer d’elle-même (tout comme dans Xojo, vous ne pouvez pas quitter votre application et la relancer automatiquement sans l’aide d’un processus externe).

Il y a effectivement le script d’Émile, qui devrait fonctionner (essayez de remplacer “to run” par “to activate”, ça peut peut-être fonctionner), mais vous pouvez aussi le lancer vous même en Xojo pure:

Var f As FolderItem=FolderItem.DriveAt(0) //Volume de démarrage
Var Dossiers() As String=Array("System","Library","CoreServices","Finder.app") 'Sous-dossiers vers le Finder

for i as Integer=0 to Dossiers.LastIndex
  f=f.Child(Dossiers(i)) 'Entrer dans chaque sous-dossier
  
  if f=nil or not f.Exists then Return //Mesure de sécurité, au cas où le système d'exploitation serait… illogique.
next i

f.Open 'Ouvrir le Finder

Merci. Effectivement j’ai essayé avec succès :slight_smile:
Shell1.Execute (“osascript -e ‘Tell application ““Finder”” to quit’”) // Quitte le Finder
Shell1.Execute (“osascript -e ‘Tell application ““Finder”” to activate’”) // relance le Finder

Il y a surement moyen de les mettre sur une seule ligne de commande.
Je vais essayer votre code Xojo car c’est ce que je cherchais depuis un moment !
Grand merci.
Denis