objective-cmacosfinderrelaunch

How does one relaunch Finder programmatically?


If I OPTION + RIGHT CLICK on the Finder icon, I get a "Relaunch" option in the context menu. I would like to programmatically relaunch Finder, if at all possible. I'm sure there is a better way to do it than to just kill it and let it restart. Assume I have the proper authorization / permissions to do so already.

Additionally, I would like to restart Spotlight as well.


Solution

  • Send it a quit event using AppleScript, then send it an activate event:

    //tell Finder to quit
    NSAppleScript *restartFinder = [[NSAppleScript alloc] initWithSource:@"tell application \"Finder\" to quit"];
    [restartFinder executeAndReturnError:nil];
    

    EDIT: add a delay to make sure Finder is ready to receive an activate event. On my machine, sometimes it needs this delay, sometimes it doesn't:

    //delay 1 second
    restartFinder = [[NSAppleScript alloc] initWithSource:@"delay 1"];
    [restartFinder executeAndReturnError:nil];
    

    (...end EDIT)

    //tell Finder to activate
    restartFinder = [[NSAppleScript alloc] initWithSource:@"tell application \"Finder\" to activate"];
    [restartFinder executeAndReturnError:nil];