Re: Launch app with params as front process and wait?
Re: Launch app with params as front process and wait?
- Subject: Re: Launch app with params as front process and wait?
- From: Ken Thomases <email@hidden>
- Date: Sat, 17 Apr 2010 08:43:14 -0500
On Apr 17, 2010, at 8:14 AM, Gaurav Srivastava wrote:
> I was working with NSTask and came across some issues. I searched on the
> internet and found that there has been a similar query but that didn't have
> any solution. The link for that is
> http://lists.apple.com/archives/cocoa-dev//2003/May/msg01468.html. Could you
> suggest any possible solution for this.
>
> Also, if my parent application has a non-modal dialog up, on launching
> another app, it goes behind the non-modal dialog. Please suggest some
> solution as I am stuck with it for last few days.
To launch a secondary application, you should use NSWorkspace or Launch Services. That will bring it to the front, even if it's already running. To wait until it's finished, you can use the techniques outlined in this tech note <http://developer.apple.com/mac/library/technotes/tn/tn2050.html>.
If you need to pass information into the other application, and you control the implementation of that application, I recommend using one of:
* -[NSWorkspace launchApplicationAtURL:options:configuration:error:] with the relevant information in the configuration parameter
* -[NSWorkspace launchAppWithBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifier:] with an AppleEvent descriptor
* LSOpenFromURLSpec() with an AppleEvent descriptor in the passThruParams fields of the inLaunchSpec parameter
You can also pass information into the application through a scripting interface.
If you don't control the implementation of the other application and the above techniques don't suffice, you can use NSTask to launch it, but it wouldn't be my first choice. If you need to bring it to the foreground, you'd want to use NSWorkspace to monitor for when it's launched and ready, and then activate it. You know when it is launched when you receive the NSWorkspaceDidLaunchApplicationNotification notification which matches the application that you ran. On 10.6 and later, you get an NSRunningApplication object with that notification, and you can activate it by invoking -activateWithOptions: on it. For 10.5 and earlier, you get a dictionary that includes a ProcessSerialNumber, and you can use SetFrontProcess with that.
Regards,
Ken
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden