FROM : John Stiles
DATE : Mon Mar 03 18:38:36 2008
Mattias Arrelid wrote:
> On 3 mar 2008, at 18.14, Nir Soffer wrote:
>
>> On Mar 3, 2008, at 18:24, Mattias Arrelid wrote:
>>
>>> I have an application that I need to restart.
>>
>> Why do you want to do that?
>
> A scenario could be that the entire contents of the .app bundle has
> been replaced with new stuff (e.g. the case with Sparkle).
>
>>> An easy way to do this could be:
>>>
>>> [[NSWorkspace sharedWorkspace] launchApplication:executablePath];
>>> [NSApp terminate:self];
>>>
>>> The problem is that the above solution results in confusion in the
>>> system dock; sometimes the original application does manage to quit
>>> before the new instance, other times not. If it does NOT manage to
>>> quit before the new one is launched, the dock ends up with two icons
>>> for my application; one that indicates that the application is
>>> launched, another one that's indicates that it's not launched. This
>>> is NOT good.
>>>
>>> I've seen other programs in need of a restart (e.g. the Sparkle
>>> framework) using a separate helper application that simply checks
>>> whether the original process has quit properly before re-launching
>>> it. This sure does work, but it isn't a pretty solution.
>>
>> Seems pretty to me. You want use a separate process to make this work
>> reliably.
>
> It works, but I'd say it was prettier if there was a framework call to
> accomplish this.
I bet that if you took some time, you could find a way to do this via
forking and using low-level BSD calls (non-Window Server) instead of
launching a full-fledged separate app.
OTOH, it would probably be easiest to just use the helper app :) Keep in
mind that this "app" could probably be as simple as a few lines of
AppleScript.
DATE : Mon Mar 03 18:38:36 2008
Mattias Arrelid wrote:
> On 3 mar 2008, at 18.14, Nir Soffer wrote:
>
>> On Mar 3, 2008, at 18:24, Mattias Arrelid wrote:
>>
>>> I have an application that I need to restart.
>>
>> Why do you want to do that?
>
> A scenario could be that the entire contents of the .app bundle has
> been replaced with new stuff (e.g. the case with Sparkle).
>
>>> An easy way to do this could be:
>>>
>>> [[NSWorkspace sharedWorkspace] launchApplication:executablePath];
>>> [NSApp terminate:self];
>>>
>>> The problem is that the above solution results in confusion in the
>>> system dock; sometimes the original application does manage to quit
>>> before the new instance, other times not. If it does NOT manage to
>>> quit before the new one is launched, the dock ends up with two icons
>>> for my application; one that indicates that the application is
>>> launched, another one that's indicates that it's not launched. This
>>> is NOT good.
>>>
>>> I've seen other programs in need of a restart (e.g. the Sparkle
>>> framework) using a separate helper application that simply checks
>>> whether the original process has quit properly before re-launching
>>> it. This sure does work, but it isn't a pretty solution.
>>
>> Seems pretty to me. You want use a separate process to make this work
>> reliably.
>
> It works, but I'd say it was prettier if there was a framework call to
> accomplish this.
I bet that if you took some time, you could find a way to do this via
forking and using low-level BSD calls (non-Window Server) instead of
launching a full-fledged separate app.
OTOH, it would probably be easiest to just use the helper app :) Keep in
mind that this "app" could probably be as simple as a few lines of
AppleScript.
| Related mails | Author | Date |
|---|---|---|
| Mattias Arrelid | Mar 3, 17:24 | |
| Nir Soffer | Mar 3, 18:14 | |
| Mattias Arrelid | Mar 3, 18:18 | |
| Jean-Daniel Dupas | Mar 3, 18:29 | |
| John Stiles | Mar 3, 18:38 | |
| Steven Degutis | Mar 3, 20:43 | |
| Michael Ash | Mar 3, 23:22 | |
| Steven Degutis | Mar 4, 02:48 | |
| Joe Ranieri | Mar 4, 03:27 | |
| Mattias Arrelid | Mar 4, 12:10 | |
| Michael Ash | Mar 4, 17:11 |






Cocoa mail archive

