0

2 つの C# アプリケーションで 2 つのサードパーティ dll (a.dll と b.dll) を使用 (および参照) しています。サードパーティ ライブラリの関数を呼び出しているときに両方のアプリケーションがハングするという、繰り返し発生する問題が発生しています。

a.dll と b.dll (a2.dll と b2.dll) のコピーを作成し、それを 2 番目のアプリケーションで使用しようとしましたが、a.dll が b.dll を参照し、anb b.dll が参照していることがわかりました。 a.dll であり、これは正しくロードされません。

デッドロックがあると思われますが、サードパーティのライブラリにあります。これを防ぐためにロックを使用することはできません。各アプリケーションはロックを強制して、そのアプリがライブラリにアクセスするスレッドが一度に 1 つだけになるようにしますが、両方のプログラムをロックすることはできません。

それで、私の質問はどうすればこの問題を解決できますか?

dll を共有したくないことを OS (Windows XP) に伝えることはできますか?

ありがとう、ジョー

4

4 に答える 4

4

名前付きミューテックスを使用して、一度に 1 つのプログラムだけにアクセスを制限できます。名前付きミューテックスはオペレーティング システム全体に制限できるため、複数のプロセスからのアクセスを防ぐために使用できます。

詳細については、Mutex クラスを参照してください。

于 2009-07-10T19:22:50.450 に答える
1

1) 片道

  • サードパーティ API をエクスポート/実装し、API を他の/リモート プロセスで使用できるようにするサーバー アプリケーションを作成します (たとえば、ドット ネット リモーティングまたは Web サービスを使用して、ネットワーク経由で API を公開します)。
  • サーバー アプリケーション内で、サード パーティの DLL に委任して API を実装します。
  • サーバー アプリケーションのインスタンスを 1 つだけ開始します。したがって、使用されているサードパーティ DLL のインスタンスは 1 つだけです。
  • 既存のアプリケーションで、サードパーティ DLL のローカル インスタンスを使用する代わりに、サービスによってエクスポートされた API を使用する
  • サービス内で、ロックを実装します (現在は単一のプロセス内にあるため、ロックを実装できます)。

2) 別の方法: 複数のプロセス (Mutexクラスなど) から見える一種のロックを使用します。

3) サード パーティの DLL のベンダーに問い合わせてください。この DLL のインスタンスは一度に 1 つだけ実行できるはずですか? 複数のインスタンスを実行することが許可されている場合、プロセス間のデッドロックを回避するために何をする必要がありますか?

于 2009-07-10T19:29:47.927 に答える
0

このdllへのアクセスを担当する別のスレッドを作成するのはどうですか...そのようにして、アプリ全体がフリーズしません

于 2009-07-10T19:20:24.933 に答える