Вопрос

Если я 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];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top