Здравствуйте Egor, Вы писали:
E>У меня вот такой вопрос. Есть DCOM сервер и есть клиент.
E>Может ли кто-нибудь рассказать или сказать где можно почитать подробно о том, как провести установку приложений, с использованием DCOM, от начала и до конца.
Тут одной установкой не обойдёшься, надо будет ещё и в коде пошаманить.
E>Т.е. на удаленной машине нужно поставить сервер и потом к нему коннектиться с клиента.
E>
1. Порядок установки сервера. Что сначала запустить, что прописать, что должно быть установлено дополнительно?
E>
2. Настройка клиента. Что сначала запустить, что прописать, что должно быть установлено дополнительно?
E>Буду ОЧЕНЬ признателен за ответ.
Вот откапал свой ответ на iXBT:
Устанавливаем одинаковые настройки безопасности на клиенте и сервере, где-нибудь сразу после CoInitialize(Ex):
::CoInitializeSecurity(
0, -1, 0, 0,
RPC_C_AUTHN_LEVEL_CONNECT,
RPC_C_IMP_LEVEL_IDENTIFY,
0, 0, 0 );
Регестрируем объект на обоих машинах
Идём в dcomcnfg на сервере.
На вкладке Identity выставляем под каким аккаунтом будет работать сервер:
The interactive user — под аккаунтом того, кто в данный момент топчит клаву (не работает, если никто не залогинился).
The launching user — под аккаунтом того, кто этот объект запустил (не удобно, если надо чтобы с одним объектом работали все пользователи).
This user — создаешь юзера — Mister Object, даёшь ему необходимые права и вперёд.
Дальше вкладка Security:
Use custom access permition — задаёшь тех, кто может работать с объектом.
Use custom launch permition — кто имеет право создавать объект.
Вызов сервера с клиента.
BSTR servnm = L"AppServer";
COSERVERINFO csi = { 0, servnm, 0, 0 };
MULTI_QI mqi = { &__uuidof(IMyInterface), 0, 0 };
HRESULT hr =
CoCreateInstanceEx(__uuidof(MyInterface),0,CLSCTX_REMOTE_SERVER,&csi,1,&mqi);
if (FAILED(hr)) {
return 0;
}
... mqi.pItf; ... // здесь указатель на IUnknownm
qi.pItf->Release();
servnm позволяет указывать имя машины на которой будет стартовать сервер.