C#:如何实现单例应用程序并接受新参数?

18
我正在创建一个(C#)程序,使用NZB文件下载二进制文件,每次仅能运行一个实例。
当用户双击.nzb文件且我的程序未运行时,它应该启动并处理它(容易,文件注册)。但如果我的程序已经在运行,我不想启动第二个实例,而是希望已经运行的实例拾取指定的文件。
使用Visual Basic DLL和.IsSingleInstance技巧可以使我的应用程序成为单实例,但我不想那样做。
正确的方法似乎是使用互斥体确保我的应用程序是单实例的,但现在我卡在如何将指定参数(.nzb文件)传递给已运行的实例上了。
感谢您的帮助!:-)

你可能已经意识到了,但是你的应用程序可能正在重新发明轮子。http://sourceforge.net/projects/sabnzbd/ 就是一个例子。 - dss539
1
是的,还有无数其他的选择 ;-) 这只是一个业余项目,用来练习我的C#编程技能,如果我喜欢结果,世界上可能会出现另一个免费的NZB下载器! :-) - Led
2
为什么你不想使用Microsoft.VisualBasic.dll中的SingleInstanceController呢?它就像框架中的其他程序集一样。只是因为名字是VisualBasic,就不能使用它吗?如果微软把它命名为Microsoft.Foo.dll,每个人都会使用它! - Oliver
Oliver,这将添加一个额外的dll引用。这就是其中一个原因,无论名称是什么;-) - Anders Rune Jensen
4个回答

3
尝试这样做:您的主程序创建一个命名管道或其他进程间通信设施并监听它。然后,您创建一个单独的小程序,当以NZB文件作为参数运行时,打开该管道,将文件信息提供给它,然后退出。接下来,您的主程序会处理新文件并下载它。

0
为什么不使用一个程序将文件添加到队列中,然后在下载程序未运行时启动它。该下载程序监视队列,这只是一个文件,您可以将下载文件名附加到其中。

0

请查看Genghis项目中的InitialInstanceActivator


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接