2009-09-22 14 views
5

Si yo OPTION + RIGHT CLICK en el icono del Finder, aparece la opción "Relaunch" en el menú contextual. Me gustaría reiniciar programáticamente Finder, si es posible. Estoy seguro de que hay una mejor manera de hacerlo que simplemente matarlo y dejar que se reinicie. Supongamos que ya tengo la autorización/los permisos adecuados para hacerlo.¿Cómo se puede relanzar un Finder programáticamente?

Además, me gustaría reiniciar Spotlight también.

Respuesta

5

Enviar un evento de dejar de usar AppleScript, a continuación, enviar un evento de activación:

//tell Finder to quit 
NSAppleScript *restartFinder = [[NSAppleScript alloc] initWithSource:@"tell application \"Finder\" to quit"]; 
[restartFinder executeAndReturnError:nil]; 

EDIT: añadir un retardo para asegurarse Buscador está preparado para recibir un evento de activación. En mi máquina, a veces se necesita este retraso, a veces no lo hace:

//delay 1 second 
restartFinder = [[NSAppleScript alloc] initWithSource:@"delay 1"]; 
[restartFinder executeAndReturnError:nil]; 

(... fin EDITAR)

//tell Finder to activate 
restartFinder = [[NSAppleScript alloc] initWithSource:@"tell application \"Finder\" to activate"]; 
[restartFinder executeAndReturnError:nil]; 
+0

¿No estás haciendo lo mismo dos veces? –

+0

Tiene una pérdida de memoria. Además, no es necesario activar Finder. Se reiniciará automáticamente. –

+0

matt ... el primer script es 'quit', el segundo es 'activate'. El código de muestra es permeable con seguridad. Finder no se reactiva sin que se lo digan al menos Snow Leopard. No estoy seguro acerca del sistema operativo anterior, pero estoy bastante seguro de que el Finder "de verdad" dejó de funcionar. – Rob

-1

'Relaunch' casi con certeza simplemente envía una señal de muerte al Finder.

3

El buscador mantiene vivo el buscador, por lo que puede matarlo y se reiniciará automáticamente. Yo uso killall Finder para lograr esto.

+1

Sí, Explorer en Windows es similar, pero matar al azar Explorer puede conducir a cosas malas; mucho mejor para cerrarlo limpiamente. –

-1

Killing Finder con killall Finder obras ya que el sistema relanzar automáticamente.

[[NSTask launchedTaskWithLaunchPath:@"/usr/bin/killall" 
    arguments:[NSArray arrayWithObjects:@"Finder", nil]] waitUntilExit]; 
Cuestiones relacionadas