2009-09-22 97 views
5

如果我在Finder图标上找到OPTION + RIGHT CLICK,我会在上下文菜单中获得一个“重新启动”选项。如果可能,我想以编程方式重新启动Finder。我敢肯定,有一种更好的方式来实现它,而不是杀死它并让它重新启动。假设我已经拥有适当的授权/许可。如何以编程方式重新启动Finder?

此外,我想重新启动Spotlight。

回答

5

发送它使用AppleScript一个退出事件,然后把它activate事件:

//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]; 
+0

你不是两次做同样的事吗? – 2009-09-22 21:22:38

+0

你有内存泄漏。另外,不需要激活Finder。它会自动重启。 – 2009-09-22 21:23:21

+0

马特...第一个脚本是'退出',第二个是'激活'。示例代码肯定是泄漏的。 Finder不会在没有被告知雪豹的情况下重新启动。对于之前的操作系统并不乐观,但我确信一个“真正”退出的Finder会退出。 – Rob 2009-09-22 21:33:27

-1

'重新启动'几乎可以肯定地发送一个杀手信号给Finder。

3

Finder通过系统保持生命,所以你可以杀死它,它会自动重新启动。我使用killall Finder来完成此操作。

+1

是的,在Windows上的资源管理器是相似的,但随机查杀资源管理器会导致不好的事情;更好地关闭它干净。 – 2009-09-22 22:11:27

-1

杀查找器killall Finder作品,因为系统会自动重新启动它。

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