На самом деле вы можете сделать это в .NET (я уже делал это в качестве подтверждения концепции), но это немного работы, чтобы все заработало правильно (время жизни процесса, регистрация и т. Д.).
Создайте новое приложение для Windows. В методе Main вызовите RegistrationServices.RegisterTypeForComClients - это управляемая оболочка CoRegisterClassObject, которая заботится о фабрике классов. Передайте ему тип управляемого класса ComVisible (тот, который вы на самом деле хотите создать - .NET автоматически предоставляет фабрику классов) вместе с RegistrationClassContext.LocalServer и RegistrationConnectionType.SingleUse. Теперь у вас есть очень простой exe-файл, который можно зарегистрировать как LocalServer32 для активации COM. Вам все равно придется определить время жизни процесса (внедрить refcounts для управляемых объектов с помощью конструкторов / финализаторов - когда вы достигнете нуля, вызовите UnregisterTypeForComClients и выйдите) - вы не можете позволить Main завершиться, пока все ваши объекты не умрут.
Регистрация не так уж и плоха: создайте атрибутивный метод ComRegisterFunction, который добавляет ключ LocalServer32 в HKLM \ CLSID (yourclsidhere), значением по умолчанию которого является путь к вашему exe-файлу. Запустите regasm yourexe.exe / codebase / tlb, и все готово.