1

フォームごとに1つの個別のプロセスで実行されるテキストエディタアプリケーションがあるとします。アプリケーションは単一のドキュメントです(つまり、タブやMDIはありません)。

A.txt、B.txt、C.txtの3つのドキュメントで開いている3つのフォームがあります。これで、ユーザーはデスクトップ上のB.txtファイルをダブルクリックします。これにより、問題のアプリケーションの新しいインスタンスが開始されます。この起動されたエディターのインスタンスは終了し、このファイルがロードされている既に実行中のプロセスの前にフォーカス/移動する必要があります。これにより、ユーザーは2つの別々のフォームで同じドキュメントをロードすることになりません。

どうすればこれを最も簡単に達成できますか?つまり、どのプロセスがすでにドキュメントを表示しているかをどのように見つけることができますか?

一度開いたアプリケーションはファイルを開いたままにしないので、プロセスのファイルハンドルを列挙してプロセスを見つけることに頼ることはできません。これには、プロセス間の何らかの形のコミュニケーションが必要だと思います。理想的には.NETソリューションを探していますが、問題は実際にはWindows関連/言語に依存しないことです。

編集:さまざまな理由で、すべてのフォームを単一のプロセスで実行するのではなく、別々のプロセスを使用しようとしていることに言及する必要があります。

4

2 に答える 2

1

この問題を解決する良い方法は、ミューテックスを使用することです。ミューテックスを 使用してアプリケーションの単一インスタンスを実行します。

現在のアプリケーション名+ファイル名(または何か)でミューテックスを開き、すでに開いているときにそのプロセスに切り替えることができます。

2番目の解決策は、パイプバインディングでWCFを使用することです。サービスである種の「アクティブ化」メソッドを呼び出して、アプリケーションがそれ自体をアクティブ化するようにします。このリンクは、プロセス間通信を行うためのいくつかの方法を提供します。

于 2012-05-07T08:50:33.693 に答える
1

使用したソリューションを投稿します。アプリケーションのインスタンスによってドキュメントが開かれると、プロセスのpidを含む.pid/.lockファイルがドキュメントの横にダンプされます。このようにして、ドキュメントを開いているプロセスに切り替えるか、そのプロセスが存在しなくなった場合はロックを解除できます。

于 2012-06-06T09:37:27.813 に答える