1

Mutex を使用して単一インスタンス アプリケーションにしようとしている .NET C# WPF アプリケーションがあります。

この .NET アプリケーションは、CreateProcessAsUser() を使用して C++ ベースの DLL によって呼び出され、環境変数を介してパラメーターが与えられます。

以降のインスタンスも同様に C++ DLL によって作成されます。

後続のインスタンスは、終了する前にアプリケーションの最初のインスタンスにパラメーターを渡す必要があります。

問題は、後続のインスタンスがデータを .NET アプリケーションの最初のインスタンスに渡すことができるように、.NET アプリケーションでどのメソッドを使用できるかということです。シンプルであるほど良い。

私はいくつかを調査しましたが、もっと簡単な方法があることを願っています。

私が研究したこと:

  • 名前付きパイプ
  • .NET リモート処理
  • Windows Messaging (WM_COPYDATA を最初のインスタンス ウィンドウに送信)

最初のインスタンスに 4 つの文字列を渡そうとしているだけなので、上記の方法は私の問題ではやややり過ぎなので、回避しようとしています。

私が考えることができる最も簡単な方法は、.NET アプリケーションから関数をエクスポートして、.NET アプリケーションの後続のインスタンスが .NET アプリケーションの最初のインスタンスでこの関数を呼び出し、関数のパラメーターとしてデータを渡すことができるようにすることです。 . しかし、これは .NET で可能ですか? .NET EXE または DLL が関数をエクスポートできないことを読みました。

ありがとう!

4

3 に答える 3

1

私が考えることができる最も簡単な方法は、.NET アプリケーションから関数をエクスポートすることです。その後、後続のインスタンスはこの関数を呼び出してパラメーターを渡すことができます。

これは、これがどのように機能するかではありません。魔法のようにプロセス境界を越えて子プロセスと対話するのではなく、.NET アセンブリを呼び出しプロセスにロードします。

Process クラスを使用してリダイレクトされたパイプで親に子を開き、Console.Read* を使用して標準入力から子を読み取らせるだけです。

于 2008-11-21T07:19:46.047 に答える
0

返信ありがとう、ポール!

上記の質問にさらに詳細を追加しましたが、シナリオが正しく理解されているかどうかはわかりません。

しかし、あなたの答えに関しては、.NETアプリの親はC ++ベースのDLLであり、.NETアプリを呼び出してパラメーターを指定するだけです。C ++ベースのDLLもこの後に終了するので、これ以上動作を追加したくありません。

したがって、データの受け渡しは、.NETアプリケーションのインスタンス間でのみ行われます。

于 2008-11-21T08:12:50.653 に答える
0

.NET から .NET に移行するので、WCF 呼び出しを行うことをお勧めします。2 つの .NET インスタンス間で名前付きパイプ トランスポートを使用して、"サービス" (最初のインスタンスが公開するもの) を公開できます。

後続のインスタンスは単一のインスタンス チェックを実行し、既に実行中のインスタンスを検出した場合は、最初のインスタンスで実行されているサービスに対して WCF 呼び出しを行い、その方法でデータを渡すことができます。

于 2008-11-22T04:20:16.193 に答える