#com #com #dcom
#com #com #dcom
Вопрос:
Приложения запускают несколько других приложений (компонентов) с помощью (D) COM . Однако, похоже, существует какой-то максимум, который может быть запущен на сервере.
Основное приложение написано на c #, остальные компоненты — на Visual Objects, 32-разрядные.
Я видел эту проблему в нескольких версиях Windows, включая версии Win 7 prof и 2008 server.
В зависимости от того, как запускается компонент, я получаю class does not exist
или
Retrieving the COM class factory for component with CLSID {50495402-21B7-11D4-A041-00A024E1D270} failed due to the following error:
80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
В последнем случае системный журнал событий сообщает:
Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"
System
Provider Name="Win32k"
EventID Qualifiers="32768" : 243
Level : 3
Task : 0
Keywords : 0x80000000000000
EventRecordID : 36855
Channel : System
computer : W151.piramide.lan
EventData
Data
Binary : 000000000100000000000000F3000080000000000000000000000000000000000000000000000000
Например, я застрял на своей машине с 48-50 компонентами.
В более ранней версии основного приложения (написанного на визуальных объектах) Я могу подключить 273 компонента.
Какие-либо подсказки / идеи?
Комментарии:
1. Теоретического ограничения на количество COM-объектов, которые вы можете запускать, не существует, хотя, естественно, если вы будете достаточно стараться, у вас в конечном итоге закончится какой-то ресурс. Вы должны посмотреть на объект / программу сервера или на то, как вы его используете, чтобы понять, почему он выходит из строя (попробуйте добавить к нему некоторые записи?). Вот что означает CO_E_SERVER_EXEC_FAILURE: «DCOM запустил процесс для обслуживания запроса объекта, но процесс не ответил на запрос». В вопросе нигде нет достаточной информации, чтобы рискнуть предположить, кроме «проблема почти наверняка не вызвана COM»
2. Любые намеки на то, какие ресурсы это могут быть? Я уверен, что это не общая память.
3. Вы могли бы начать с поиска информации о событии. Быстрый поиск по ‘eventid 32768 243’ возвращает кучу совпадений с фразой «сбой выделения кучи рабочего стола». Звучит как хороший намек. Изучите эту фразу и посмотрите на свою программу, чтобы увидеть, что может потреблять так много кучи рабочего стола.
4. Ваши компоненты создают слишком много окон, что-то под названием «Визуальные объекты» было бы подсказкой. Конечно, никто не видит, поскольку они выполняются в сеансе 0. Который по умолчанию использует небольшую кучу рабочего стола, поскольку службы не должны создавать много окон. Вам нужно увеличить размер кучи, что хорошо описано здесь .
5. @Hans Passant «Визуальные объекты» — это язык программирования CA, GrafxSoft, см. Ссылку . Я проверю возможность увеличения кучи рабочего стола и посмотрю, в чем может быть разница между двумя сценариями.