2009-05-27 84 views
15

我正在創建一個使用NZB文件下載二進制文件的(C#)程序,可能只有一個應用程序在任何時候運行。C#:如何 - 接受新參數的單實例應用程序?

所以,當用戶雙擊一個.nzb文件,我的程序沒有運行,它應該啓動並處理它(簡單,文件註冊)。 現在,如果我的程序已經運行,我不想啓動第二個實例 - 我希望已經運行的實例選取指定的文件。

使用帶有.IsSingleInstance技巧的Visual Basic DLL可以完成我的應用程序單實例,但我不想去那裏。

正確的方法似乎是使用互斥鎖來確保我的應用程序是單實例, 但現在我堅持如何將指定參數(.nzb文件)傳遞給已經運行的實例。

幫助,將不勝感激! :-)

+0

你可能已經意識到了這一點,但你可能會重新發明你的應用程序。 http://sourceforge.net/projects/sabnzbd/只是一個例子 – dss539 2009-05-27 21:16:47

+1

是的,還有無數的其他人;-) 這是一個愛好項目,只是用C#伸縮手指,如果我喜歡這個世界的結果最終只有另一個免費NZB下載器! :-) – Led 2009-05-27 21:21:33

+2

爲什麼你不想使用Microsoft.VisualBasic.dll中的SingleInstanceController?像其他任何人一樣,這是一個框架內的程序集。僅僅因爲名稱是VisualBasic,它不會被使用。如果微軟稱之爲Microsoft.Foo.dll,每個人都會使用它! – Oliver 2010-02-19 11:30:38

回答

2

試試這個:你的主程序創建一個命名管道或其他進程間通信工具並在其上偵聽。您創建一個單獨的小程序,當以NZB文件作爲參數運行時,打開管道,將文件信息提供給它,然後退出。然後,您的主程序將處理新文件並下載它。

0

爲什麼不能有一個程序將文件添加到隊列中,然後在下載程序沒有運行的情況下啓動它。該下載程序監視隊列,這只是一個附加下載文件名的文件。

0

看那InitialInstanceActivator在Genghis項目

0

使用「好實施」,我不得不添加一個writer.Flush()後使用WriteLine()使其工作。我浪費了一點時間來找到這個......

相關問題