如何以编程方式重新启动Finder?

时间:2009-09-22 20:33:59

标签: objective-c macos finder relaunch

如果我在Finder图标上OPTION + RIGHT CLICK,我会在上下文菜单中看到“重新启动”选项。如果可能的话,我想以编程方式重新启动Finder。我确信有一个更好的方法来做它而不是杀死它并让它重新启动。假设我已经拥有相应的授权/许可权。

此外,我也想重新启动Spotlight。

4 个答案:

答案 0 :(得分:5)

使用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];

答案 1 :(得分:3)

Finder由系统保持活着,所以你可以杀死它,它会自动重新启动。我使用killall Finder来完成此任务。

答案 2 :(得分:-1)

'重新启动'几乎肯定只是向Finder发送一个终止信号。

答案 3 :(得分:-1)

使用killall Finder杀死Finder,因为系统会自动重新启动它。

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