18

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 ! :-)

Led
  • 2,002
  • 4
  • 23
  • 31
  • You're probably aware of this, but you may be reinventing the wheel with your application. http://sourceforge.net/projects/sabnzbd/ is but one example – dss539 May 27 '09 at 21:16
  • 1
    Yup, and there are countless others ;-) It's a hobby-project just to flex my fingers with C#, and if I like the result the world may end up with just another freeware NZB-downloader ! :-) – Led May 27 '09 at 21:21
  • 2
    Why don't you want to use the SingleInstanceController from Microsoft.VisualBasic.dll? It's an assembly within the framework like anyone else. Just because the name is VisualBasic it won't be used. If Microsoft had call it Microsoft.Foo.dll everyone would use it! – Oliver Feb 19 '10 at 11:30
  • Oliver, it will add an additional dll reference. That's one reason, no matter what the name is ;-) – Anders Rune Jensen Apr 28 '10 at 07:39

4 Answers4

3

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
  • 8,002
  • 1
  • 34
  • 48
0

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.

D'Arcy Rittich
  • 167,292
  • 40
  • 290
  • 283
0

Look at the InitialInstanceActivator at the Genghis project

Mike Marshall
  • 7,788
  • 4
  • 39
  • 63
0

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

Sandeep Datta
  • 28,607
  • 15
  • 70
  • 90