2010-12-27 8 views
1

私はいくつかのオプションのコマンドライン引数を取ることができるWPFアプリケーションを持っています。2つのアプリケーション間の単純な通信

このアプリケーションも単一インスタンスのアプリケーションです(すでに開いている場合は、すべてのインスタンスを閉じるためにミューテックスを使用します)。

何かしたいのですが、何かcmd行のargsでアプリケーションを開こうとすると、アプリケーションはそれらのアプリケーションと何をするのでしょうか?(私のアプリケーションでは、 cmd行)。

これを達成する最も簡単な方法は何ですか?ここpsedoコードで

は、私はあなたがすなわち、論理を反転を検討したいと思うかもしれ

protected override void OnStartup(StartupEventArgs e) 
{ 
    bool mutexIsNew; 
    using (System.Threading.Mutex m = 
      new System.Threading.Mutex(true, "MyApplication", out mutexIsNew)) 
    { 
     //if this is not the first instance of the app 
     if (!mutexIsNew) 
     { 
       //if there is some cmd line args 
       if (e.Args.Length > 0) 
       { 
        //send the args to the older instance so it can handle them 
        SendToOtherInstance(e.Args); 
        //shutdown this new instance 
        Application.Current.Shutdown(); 
       } 

     } 
    } 
    base.OnStartup(e); 
} 
+0

メッセージ転送のためにメモリマップファイルを使用して待機ハンドルを使用することができます - この記事のようにhttp://techmikael.blogspot.com/2010/02/blazing-fast-ipc-in-net-4 -wcf-versushtml –

+0

簡単な方法は、このログインをアプリの 'Main()'メソッドに入れることです。あなたがそれをやることを妨げる何かがありますか? –

答えて

2

コードプロジェクト上の単一インスタンスアプリケーションの実装の多くは、私はいくつかのソリューションを試みたが、私は本当にthis oneよう

...実際に、それはあなたが望むどちらかを決定するのは難しいので、それらの多くがありますが、あります。 2番目のインスタンスに渡されるコマンドラインパラメータを傍受するのが非常に簡単です。

+0

素晴らしい、その解決策はそれを素敵かつ簡単にしました。私はちょうど2番目のインスタンスに渡されたコマンドラインパラメータを傍受する方法を探していたと思います。 – KyleGobel

0

探しているものです。すでに実行中のインスタンスを閉じて新しいパラメータで再起動してください。

+0

これはあまりにも面倒で、私がやらなければならないことだとすれば、誰かがそれを使って作業しているとインスタンスを閉じることはしたくない。 Visual Studioと同様に、ドキュメントを開いていて別のコードファイルをダブルクリックすると、他のすべてのドキュメントを閉じて新しいドキュメントを開くのではなく、Visual Studioの同じインスタンス内で開きます。 – KyleGobel

0

WM_USERの範囲でWindowsメッセージを送信してみませんか?情報のマーシャリングを少し行う必要がありますが、GlobalAlloc、GlobalLockなどで簡単に行うことができます。

0

.net 4を使用している場合は、プロセス間通信のメモリマップファイルを考慮する必要があります。 2番目のインスタンスは、共有メモリにデータを書き込んで、元のインスタンスに通知するためにシステムミューテックスを設定してからシャットダウンすることができます。メモリマップファイルのoverviewを参照してください。

また、簡単なことですが、コマンドライン引数を、元のインスタンスによって常に監視されているフォルダ内の単純なテキストファイルに書き込みます。オリジナルのインスタンスは新しいファイルを見て、それを処理してから削除します。この方法は、.netのどのバージョンでも動作し、テスト/デバッグが容易です。

関連する問題