2009-05-27 18 views
15

NZBファイルを使用してバイナリをダウンロードする(C#)プログラムを作成していますが、アプリケーションのインスタンスは常に1つしか実行できません。C#:方法 - 新しいパラメータを受け入れるシングルインスタンスアプリケーションですか?

ユーザーが.nzbファイルをダブルクリックしてプログラムが実行されていない場合は、起動して処理する必要があります(ファイル登録が簡単です)。 私のプログラムがすでに実行されている場合、2番目のインスタンスを起動したくない - 既に実行中のインスタンスが指定されたファイルを取得したい。

Visual Basic DLLを.IsSingleInstanceトリックで使用してアプリケーションを作成することはできますが、そこには行きたくありません。

正しい方法は、私のアプリケーションが単一インスタンス、 であることを保証するためにミューテックスを使用するように思われますが、今は既に実行中のインスタンスに指定されたパラメータ(.nzbファイル)を渡す方法に固執しています。

ご了承ください。 :-)

+0

あなたはおそらくこれを認識していますが、あなたのアプリケーションでホイールを再発明しているかもしれません。 http://sourceforge.net/projects/sabnzbd/ – dss539

+1

ええと、無数の人がいます;-) C#で指を曲げるのはホビープロジェクトです。結果が好きな人はちょうど別のフリーウェアのNZBダウンローダで終わる! :-) – Led

+2

Microsoft.VisualBasic.dllのSingleInstanceControllerを使用しないのはなぜですか?他の誰と同じように、フレームワーク内のアセンブリです。名前がVisualBasicなので、それは使用されません。 MicrosoftがMicrosoft.Foo.dllと呼んでいたら、誰もがそれを使用します! – Oliver

答えて

2

これを試してください:あなたのメインプログラムは、名前付きパイプまたは他のプロセス間通信機能を作成し、それをリッスンします。別の小さなプログラムを作成し、NZBファイルをパラメータとして実行したときにパイプを開き、ファイル情報をそのファイルに送り出して終了します。メインプログラムが新しいファイルを処理してダウンロードします。

0

ファイルをキューに追加して、まだ実行中でない場合は、ダウンロードプログラムを起動するのはなぜですか。そのダウンロードプログラムは、ダウンロードファイル名を追加するファイルであるキューを監視します。

0

GenghisプロジェクトでInitialInstanceActivatorを見

0

「素敵な実装の使用」を参照して、このような.net remoting

0

としてIPC(プロセス間通信)メカニズムを使用して、私は後)(writer.Flushを追加する必要がありましたWriteLine()を動作させます。私はこれを見つけるために少し時間を無駄にしました...

関連する問題