0

アウト オブ プロセスで実行されるベンダーの COM オートメーション サーバーと対話する必要があるマネージ コードを作成しています。複数のクライアントが接続すると、このサーバーが不安定になることがわかりました。たとえば、プロセス A のマネージ コードとプロセス B のマネージ コードの両方がこの COM サーバーに接続している場合、COM サーバーに対して単一のプロセスが起動され、その動作は信頼性に欠けます。 クライアントとサーバーの接続ごとに個別のプロセスを強制する方法があることを願っています。理想的には、次のようになりたいと思います。

管理対象プロセス A がプロセスC1
で COM サーバーと通信中 管理対象プロセス B がプロセスC2で COM サーバーと通信中

頭に浮かんだ考えの 1 つは、プロセス A とプロセス B を異なるセキュリティ ID で実行すると、COM インフラストラクチャが別のサーバー プロセスを作成する可能性があるということでした。しかし、私はむしろその道をたどりたくありません。管理対象プロセス A と管理対象プロセス B は、実際には Windows サービスです。そして、ID ローカル システムでそれらを実行しています (デスクトップと対話できるようにする必要があり、ローカルとして実行されないサービスのサービス アプレットの [デスクトップと対話する] ボックスをチェックできないためです)。システム)。そして、私がデスクトップと対話する必要がある理由は、この COM サーバーが時折画面にダイアログ ボックスを表示し、サービス自体がデスクトップと対話できない場合、COM サーバーが生成され、ダイアログを表示できないためです (私はそれが非表示の WinStation に表示されます)。

4

3 に答える 3

2

COM+ に登録されたコンポーネントを配置します。これにより、分離レイヤーが配置されます。
使用: コントロール パネル -> 管理ツール
または cmd/execute DCOMCNFG

コンポーネント サービス -> コンピューター -> マイ コンピューター -> COM+ アプリケーション、右クリック、新しいアプリケーション、次へ、空のアプリケーションを作成、アプリ名「COM+ your.dll」を入力、次へ、ローカル サービスを選択、次へ、次へ、次へ、完了.

新しいアイテムが作成されたら、[コンポーネント] で展開し、右クリックして [新しいコンポーネント] を選択し、[新しいコンポーネントのインストール] を選択して、コンポーネントを選択します。

[コンポーネント プロパティ]、[ID] タブの順にクリックし、[システム アカウント] を選択します。

呼び出しのエラーについては、Event after を参照してください。

于 2009-02-04T17:13:08.653 に答える
1

久しぶりにやったので記憶があいまいです。

DCOM構成ツールを使用してOOP COMサーバーをDCOMサーバーとして構成すると、分離レベルを指定できると思います。私は何年も前に、IIS からスレッドセーフな方法でアクセスする必要がある非スレッドセーフなインプロセス DLL を使用しましたが、それは魅力的でした。

それがあなたのために働くかどうか私に知らせてください:)

于 2009-02-02T16:25:28.920 に答える
0

あなたの最善の策は、ベンダーにコンポーネントを修正してもらうことです。結局のところ、複数のクライアントを処理できない場合は、他のバグが潜んでいる可能性があります。これができない場合は、他の方法を試してみてください。

インプロセス COM オブジェクトを使用して、手動で dll をロードし、COM を経由せずにインターフェイスに直接アクセスする機会がありました。

アウトプロセス COM でこれを自分で実行したことはありませんが、試してみることができることがいくつかあります。最終的にライブラリは、関数を呼び出すメッセージを受信するプロセスにすぎません。

クライアントごとにプロセスの新しいコピーを手動で開始し、メッセージを送信できる場合があります。これでいくつかの問題が発生する可能性があります。たとえば、プロセスが既に実行されているかどうかを確認し、開始を拒否するか、そうでなければ満足できない場合があります。

クライアント数の上限がわかっている場合は、元の .exe ファイルの複数のコピーを作成し、バイナリ パッチ (Microsoft Research の detours ライブラリに似たもの) を使用して COM.登録関数を作成し、各コピーを個別の COM オブジェクトとして登録します。

于 2009-02-02T16:25:53.913 に答える