Re[5]: Получение CLSID по ProgId для удаленного сервера
От: Алекс Россия http://wise-orm.com
Дата: 21.08.02 12:46
Оценка: 13 (2)
Здравствуйте Sevig, Вы писали:

[]

S>Но где взять CLSID_OPCServer ?

S>Если его взять с локального, все работает, проверял.

Ну и что, что ты его получишь. Ну предположим тебе повезло и на удаленной машине запущен сервис regsvr.exe. Ты приконекчиваешься к нему (RegConnectRegistry) находишь ProgId, CLSID и проч. Подставляешь его в CoCreateInstanceEx. СОМ ищет его на локальной машине! Так хорошо, тогда мы прописываем его на локальной машине. Снова вызываем CoCreateInstanceEx, если повезет (безопастность сервака настроена, например) СОМ создаст объект, однако при она вернет тебе E_NOINTERFACE (или чего-нибудь в этом духе), потому что локально интерфейс не зарегестрирован.
Для его регистрации нужна запись в реестре HKCR\Interfaces, библиотека типа (для стандартного маршалера) или прокся (если используется не стандартный). Где их взять? В принципе можно опять залезть на сервак, покопаться там в реестре и все такое, но это ламерство.

Обычно, для обеспечения возможности создания удаленного экземпляра сервака проводят последовательность административных действий. Например таких (стандартный маршалер):

1. Регистрация кокласса на сервере, включая библиотеку типа и инфу по AppID
2. Настройка безопастности с помощью dcomcnfg
3. Копирование на клиент библиотеки типа и reg-файла для модификации HKCR\CLSID (я пользую ATL-ный rgs)
4. Регистрация биб. типа и reg-файла
5. Только теперь попытка создания удаленного сервака.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.