Что мне нужно сделать, чтобы реализовать COM-сервер «вне процесса» на C#?

StackOverflow https://stackoverflow.com/questions/30653

  •  09-06-2019
  •  | 
  •  

Вопрос

Я пытаюсь реализовать COM-сервер «вне процесса», написанный на C#.Как мне это сделать?

Мне нужно, чтобы код C# находился вне процесса моего основного приложения C++, поскольку я не могу загрузить среду выполнения .NET в пространство основного процесса.

ПОЧЕМУ?:
Мой код C++ находится в DLL, которая загружается во множество различных пользовательских EXE-файлов, некоторые из которых используют разные версии среды выполнения .NET.Поскольку в один процесс может быть загружена только одна среда выполнения, лучше всего поместить мой код C# в другой процесс.

Это было полезно?

Решение

Компоненты COM+ можно создавать с помощью System.EnterpriseServices.ServicedComponent.Следовательно, вы сможете создавать активацию компонентов вне процесса и внутри процесса (клиента), а также все преимущества COM+ по объединению в пулы, удаленному взаимодействию, запуску как службе Windows и т. д.

Другие советы

Здесь мы можем прочитать, что это возможно, но exe-файл будет загружен как библиотека, а не запущен как отдельный процесс, как exe-файл.Не знаю, для тебя это проблема?Он также содержит некоторые возможные решения, если вы хотите, чтобы он действовал как настоящий внепроцессный com-сервер.Но, возможно, лучше использовать другой способ взаимодействия между процессами.Например, .Net Remoting.

Я не могу рекомендовать это, так как путь, но вы можете создать оболочку, вызываемую COM, для вашей библиотеки C#, а затем создать exe-проект VB6 ActiveX, который делегирует вызовы вашей библиотеке C#.

Почему вы не можете загрузить среду выполнения .net в пространство процесса?Можно разместить среду выполнения .net и вызывать .net с помощью COM.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top