2009-09-22 8 views
5

Jeśli I OPTION + RIGHT CLICK na ikonie Findera, otrzymuję opcję "Ponownie uruchom" w menu kontekstowym. Chciałbym programowo ponownie uruchomić Findera, o ile to możliwe. Jestem pewien, że jest lepszy sposób, aby to zrobić, niż po prostu go zabić i pozwolić na ponowne uruchomienie. Załóżmy, że mam już odpowiednie uprawnienia/uprawnienia, aby to zrobić.Jak programowo ponownie uruchomić program Finder?

Dodatkowo chciałbym również ponownie uruchomić Spotlight.

Odpowiedz

5

wysłać go do rzucenia zdarzenia używając AppleScript, a następnie wysłać go zdarzenie Włączanie:

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

EDIT: dodaj opóźnienie, aby upewnić Finder jest gotowa do odbioru zdarzenie aktywować. Na moim komputerze, czasami potrzebuje tego opóźnienia, czasami nie:

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

(... koniec EDIT)

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

czy nie robisz tego samego dwa razy ??? –

+0

Masz wyciek pamięci. Ponadto nie trzeba aktywować Findera. Uruchomi się automatycznie ponownie. –

+0

matt ... pierwszy skrypt to "zakończ", drugi to "aktywuj". Przykładowy kod jest na pewno nieszczelny. Finder nie reaktywuje się bez uzyskania informacji przynajmniej w Snow Leopard. Nie pozytywnie o wcześniejszym systemie operacyjnym, ale jestem prawie pewny, że "prawdziwie" przestał działać Finder. – Rob

-1

"Uruchom ponownie" prawie na pewno wysyła sygnał zabicia do Findera.

3

Finder jest utrzymywany przy życiu przez system, więc możesz go po prostu zabić i automatycznie uruchomi się ponownie. Używam killall Finder, aby to osiągnąć.

+1

Tak, Explorer na Windowsie jest podobny, ale losowe zabijanie Explorera może prowadzić do złych rzeczy; o wiele lepiej, aby go zamknąć. –

-1

Zabijanie Finder z killall Finder prac, ponieważ system automatycznie wznowienie go.

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