2011-12-06 10 views
1

私はCOMサーバーを使用する.NETアプリケーションを持っています。 COMサーバーは私が実行しているマシンに登録されているので、コードがnew MyInterop.SomeObject()になるとMyComServer.exeが起動します。.NETの相互運用機能で使用するCOMサーバーを指定する方法はありますか。

しかし、私がデバッグしているときに、MyComServer.exeのいくつかのコピーが、異なる設定ファイルを持つ異なるフォルダに存在しています。私はどのアプリケーションをロードするかを指定したいと思います。私の知っている

2つの回避策は以下のとおりです。

  • が、私はそれを使用前に毎回(MyComServer.exe /regserver)を再登録することができます。しかし、地元の問題にグローバルな解決法を使用するのは嫌です。
  • MyComServer.exeを手動で起動します(スタンドアロンアプリケーションとして実行します)。COMインフラストラクチャはこの既存のプロセスを再利用します。しかしそれはあまり自動化できません。

もっと適切な情報はありますか?

答えて

0

デバッグバージョンに基づいて動的に設定ファイルを作成できます。

+0

Hm?また、別のサーバーに接続する複数のインスタンスのアプリケーションを並列に実行する場合はどうすればよいでしょうか? –

+0

ああ、あなたがそれらの異なるサーバーを必要とする同時アプリケーションを持っている場合は..元々は、サーバーの複数のデバッグバージョンを構築することを提案していた..潜在的なレジストリ混乱..しかし、持ってる。 –

+0

まあ、現在のところ、それは単なる仮定的なシナリオです。私は実際にそれを行う必要はないと思っています...しかし、私は準備が好きです。だからあなたは言っている - COMはそのような虚偽を許可しない? –

1

新しいMyInterop.SomeObject()呼び出しによって、COMサーバー.exeが開始されました。デバッグ中にプログラムを終了させ、.NETを正常にシャットダウンすることなく、ファイナライザスレッドの参照カウントを減らさずに、多くの.exeが実行されていることは間違いありません。 COMには、これらの失われた参照をクリーンアップするメカニズムはありません。 Taskmgr.exeの[プロセス]タブを使用して、実行中のインスタンスを強制終了するだけです。

COMには、ROT(Running Object Table)を通じてサーバーの実行インスタンスに接続するメカニズムがあります。しかしこれはあとで実行できるものではなく、サーバーによって明示的にサポートされなければなりません。あなたがサーバを使って調整するオプションを持っていなければ、それをインプロセスサーバにすることを検討してください。ずっと面倒です。

関連する問題