2009-09-22 6 views
5

Se I OPTION + RIGHT CLICK sull'icona del Finder, viene visualizzata l'opzione "Rilancio" nel menu di scelta rapida. Vorrei riavviare a livello di codice Finder, se possibile. Sono sicuro che c'è un modo migliore per farlo che ucciderlo e lasciarlo riavviare. Supponiamo che io abbia le autorizzazioni/permessi appropriate per farlo già.Come si può rilanciare il Finder a livello di programmazione?

Inoltre, vorrei riavviare Spotlight.

risposta

5

Invia un evento smettere di usare AppleScript, quindi inviarlo di un evento activate:

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

EDIT: aggiungere un ritardo per assicurarsi Finder è pronto a ricevere un evento activate. Sulla mia macchina, a volte ha bisogno di questo ritardo, a volte non è così:

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

(... fine EDIT)

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

non stai facendo la stessa cosa due volte ??? –

+0

Hai una perdita di memoria. Inoltre, non è necessario attivare il Finder. Si riavvierà automaticamente. –

+0

matt ... il primo script è 'esci', il secondo è 'attiva'. Il codice di esempio perde di sicuro. Il Finder non si riattiva senza essere stato informato almeno da Snow Leopard. Non positivo rispetto al sistema operativo precedente, ma sono abbastanza sicuro che un "vero" smettere di Finder rimane chiuso. – Rob

-1

"Rilancio" invia quasi certamente un segnale di eliminazione al Finder.

3

Il Finder è tenuto in vita dal sistema, quindi puoi semplicemente ucciderlo e verrà automaticamente riavviato. Io uso killall Finder per realizzare questo.

+1

Sì, Explorer su Windows è simile, ma uccidere in modo casuale Explorer può portare a cose cattive; molto meglio spegnerlo in modo pulito. –

-1

Uccidere Finder con killall Finder opere dal momento che il sistema automaticamente rilanciarlo.

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