Как программно перезапустить Finder? - PullRequest
5 голосов
/ 23 сентября 2009

Если я OPTION + RIGHT CLICK на значке Finder, я получаю опцию « Relaunch » в контекстном меню. Я хотел бы программно перезапустить Finder, если это вообще возможно. Я уверен, что есть лучший способ сделать это, чем просто убить его и перезапустить. Предположим, у меня уже есть соответствующие полномочия / разрешения для этого.

Кроме того, я также хотел бы перезапустить Spotlight.

Ответы [ 4 ]

5 голосов
/ 23 сентября 2009

Отправьте ему событие выхода, используя AppleScript, затем отправьте событие активации:

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

РЕДАКТИРОВАТЬ: добавить задержку, чтобы убедиться, что Finder готов к получению события активации. На моей машине иногда требуется эта задержка, иногда нет:

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

(... конец EDIT)

//tell Finder to activate
restartFinder = [[NSAppleScript alloc] initWithSource:@"tell application \"Finder\" to activate"];
[restartFinder executeAndReturnError:nil];
3 голосов
/ 23 сентября 2009

Finder поддерживается системой, так что вы можете просто убить его, и он автоматически запустится. Я использую killall Finder для достижения этой цели.

0 голосов
/ 13 марта 2013

Killing Finder с killall Finder работает, так как система автоматически перезапустит его.

[[NSTask launchedTaskWithLaunchPath:@"/usr/bin/killall" 
    arguments:[NSArray arrayWithObjects:@"Finder", nil]] waitUntilExit];
0 голосов
/ 23 сентября 2009

«Перезапуск» почти наверняка просто посылает сигнал уничтожения в Finder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...