views:

2000

answers:

6

I'm creating a (C#) program that downloads binaries using NZB files, there may only be one instance of my application running at any time.

So when a user doubleclicks an .nzb-file and my program is not running, it should start and process it (easy, file registration). Now if my program is already running, I do NOT want to launch a second instance - I want the already-running instance to pick up the specified file.

Making my app single-instance can be done using the Visual Basic DLL with the .IsSingleInstance trick, but I don't want to go there.

The right way seems to be to use a mutex to ensure my app is single-instance, but now I'm stuck on how to pass the specified parameter (the .nzb file) to the already-running instance.

Help would be appreciated ! :-)

+1  A: 

Try this: Your main program creates a named pipe or other interprocess communication facility and listens on it. You create a separate small program that, when run with an NZB file as a parameter, opens the pipe, feeds the file info into it, and exits. Your main program then processes the new file and downloads it.

Aric TenEyck
A: 

Why not have one program that adds the file to a queue, and then kicks off the downloading program if it is not already running. That downloading program watches the queue, which is just a file that you append download file names to.

RedFilter
A: 

Look at the InitialInstanceActivator at the Genghis project

mjmarsh
A: 

Use an IPC (inter process communication) mechanism such as .net remoting

SDX2000
+4  A: 

Here is a nice implementation without IsSingleInstance that uses a Mutex but handles arguments. And here is one with IsSingleInstance in case you change your mind. :)

JP Alioto
+1 nice examples.
BenAlabaster
BAA! the "nice implementation" link is dead :(
TWith2Sugars
The wayback machine has a copy: http://web.archive.org/web/20080506103924/http://www.flawlesscode.com/post/2008/02/Enforcing-single-instance-with-argument-passing.aspx
Jonathan
And it also exists here: (attachment is available from this site) http://sdt.sumida.com.cn:8080/cs/blogs/wicky/archive/2008/03/25/enforcing-single-instance-with-argument-passing.aspx
Jonathan