Как указать, какой COM-сервер должен использовать мой .NET-интерфейс? - PullRequest
1 голос
/ 06 декабря 2011

У меня есть приложение .NET, которое использует COM-сервер.COM-сервер зарегистрирован на компьютере, на котором я его запускаю, поэтому, когда мой код достигает new MyInterop.SomeObject(), запускается соответствующий MyComServer.exe.

Однако, поскольку я отлаживаю, у меня есть несколько копийMyComServer.exe находится в разных папках с разными файлами конфигурации.Я хотел бы указать, какое приложение должно загружаться.

Два известных мне обходных пути:

  • Я могу перерегистрировать его каждый раз (MyComServer.exe /regserver) перед использованием.Но я не люблю использовать глобальное решение для локальной проблемы.
  • Я запускаю MyComServer.exe вручную (затем он запускается как отдельное приложение), и инфраструктура COM повторно использует этот существующий процесс.Но это не очень автоматизировано.

Есть что-нибудь более подходящее?

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

COM-сервер .exe запущен вашим новым вызовом MyInterop.SomeObject () .Без сомнения, у вас работает так много .exe, потому что вы завершили программу во время отладки, не позволив .NET правильно завершить работу и уменьшить количество ссылок в потоке финализатора.COM не имеет механизма для очистки этих потерянных ссылок.Просто используйте Taskmgr.exe, вкладка Process для уничтожения запущенных экземпляров.

COM имеет механизм для подключения к работающему экземпляру сервера через ROT (Таблица бегущих объектов).Однако это не то, что вы можете использовать позже, оно должно явно поддерживаться сервером.Если у вас есть возможность поработать с сервером, рассмотрите возможность сделать его внутрипроцессным сервером.Гораздо менее хлопотно.

0 голосов
/ 06 декабря 2011

Вы можете попробовать создать файл конфигурации динамически в зависимости от версии отладки.

...