如果我在Finder图标上找到OPTION + RIGHT CLICK
,我会在上下文菜单中获得一个“重新启动”选项。如果可能,我想以编程方式重新启动Finder。我敢肯定,有一种更好的方式来实现它,而不是杀死它并让它重新启动。假设我已经拥有适当的授权/许可。如何以编程方式重新启动Finder?
此外,我想重新启动Spotlight。
如果我在Finder图标上找到OPTION + RIGHT CLICK
,我会在上下文菜单中获得一个“重新启动”选项。如果可能,我想以编程方式重新启动Finder。我敢肯定,有一种更好的方式来实现它,而不是杀死它并让它重新启动。假设我已经拥有适当的授权/许可。如何以编程方式重新启动Finder?
此外,我想重新启动Spotlight。
发送它使用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];
'重新启动'几乎可以肯定地发送一个杀手信号给Finder。
Finder通过系统保持生命,所以你可以杀死它,它会自动重新启动。我使用killall Finder
来完成此操作。
是的,在Windows上的资源管理器是相似的,但随机查杀资源管理器会导致不好的事情;更好地关闭它干净。 – 2009-09-22 22:11:27
杀查找器killall Finder
作品,因为系统会自动重新启动它。
[[NSTask launchedTaskWithLaunchPath:@"/usr/bin/killall"
arguments:[NSArray arrayWithObjects:@"Finder", nil]] waitUntilExit];
你不是两次做同样的事吗? – 2009-09-22 21:22:38
你有内存泄漏。另外,不需要激活Finder。它会自动重启。 – 2009-09-22 21:23:21
马特...第一个脚本是'退出',第二个是'激活'。示例代码肯定是泄漏的。 Finder不会在没有被告知雪豹的情况下重新启动。对于之前的操作系统并不乐观,但我确信一个“真正”退出的Finder会退出。 – Rob 2009-09-22 21:33:27