Как программно перезапустить Finder?
-
13-09-2019 - |
Вопрос
Если я OPTION + RIGHT CLICK
на значке Finder я получаю "Перезапуск" опция в контекстном меню.Я хотел бы программно перезапустить Finder, если это вообще возможно.Я уверен, что есть лучший способ сделать это, чем просто убить его и позволить ему перезапуститься.Предположим, у меня уже есть соответствующая авторизация для этого.
Кроме того, я также хотел бы перезапустить Spotlight.
Решение
Отправьте ему событие выхода с помощью 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];
(... окончательная ПРАВКА)
//tell Finder to activate
restartFinder = [[NSAppleScript alloc] initWithSource:@"tell application \"Finder\" to activate"];
[restartFinder executeAndReturnError:nil];
Другие советы
Система поддерживает работу Finder, поэтому вы можете просто отключить его, и он автоматически перезапустится.Я использую killall Finder
чтобы достичь этого.
"Перезапуск" почти наверняка просто посылает Искателю сигнал об уничтожении.
Поиск убийц с помощью killall Finder
работает, так как система автоматически перезапустит его.
[[NSTask launchedTaskWithLaunchPath:@"/usr/bin/killall"
arguments:[NSArray arrayWithObjects:@"Finder", nil]] waitUntilExit];