Como é que um relançamento Localizador de programação?
-
13-09-2019 - |
Pergunta
Se eu OPTION + RIGHT CLICK
no ícone do Finder, eu recebo um " Relançamento " opção no menu de contexto. Eu gostaria de relançar programaticamente Finder, se possível. Eu tenho certeza que há uma maneira melhor de fazer isso do que simplesmente matá-lo e deixá-lo reiniciar. Suponha que eu tenho o bom autorização / permissões para fazê-lo já.
Além disso, eu gostaria de reiniciar Spotlight também.
Solução
Enviar uma saia evento usando AppleScript, em seguida, enviá-lo um evento para ativar:
//tell Finder to quit
NSAppleScript *restartFinder = [[NSAppleScript alloc] initWithSource:@"tell application \"Finder\" to quit"];
[restartFinder executeAndReturnError:nil];
EDIT: adicionar um atraso para se certificar do Finder está pronto para receber um evento activate. Na minha máquina, às vezes ele precisa esse atraso, às vezes não:
//delay 1 second
restartFinder = [[NSAppleScript alloc] initWithSource:@"delay 1"];
[restartFinder executeAndReturnError:nil];
(... end EDIT)
//tell Finder to activate
restartFinder = [[NSAppleScript alloc] initWithSource:@"tell application \"Finder\" to activate"];
[restartFinder executeAndReturnError:nil];
Outras dicas
Localizador é mantido vivo pelo sistema, assim você pode simplesmente matá-lo e ele vai relançar automaticamente. Eu uso killall Finder
para alcançar este objetivo.
'relançamento' quase certamente apenas envia um sinal kill para o Finder.
Killing do Finder com obras killall Finder
desde que o sistema irá relançar-lo automaticamente.
[[NSTask launchedTaskWithLaunchPath:@"/usr/bin/killall"
arguments:[NSArray arrayWithObjects:@"Finder", nil]] waitUntilExit];