Re[6]: Interactive Сервис, с Log on : [сетевой юзер]
От: -lexa- Россия  
Дата: 14.03.02 10:36
Оценка:
Здравствуйте Alex Fedotov, Вы писали:


AF>Ты не так понял. Здесь написано, что сервис не может быть DCOM клиентом, т.е. не сможет создавать компоненты на других машинах, так как не сможет себя аутентифицировать.


Возможно ....

вопрос ушел в сторону от API но тем не менее...


но я создал тестовый DCOM клиент и сервер , сервер есть сервис.

При запуск клиента на той же машине что и сервер
с галкой interact with desktop все отрабатывает.

Когда я в Logon as у сервиса сервера ставлю Localsystem то по при запуске клиента на другой машине методы не отрабатывают. Причем
HRESULT hr=::CoCreateInstance(CLSID_ServiceComObj,NULL,CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER |CLSCTX_LOCAL_SERVER ,IID_IServiceComObj,(void**) &pCP );

SUCCEEDED(hr) есть true

При Logon as <Сетевой юзер с правами на машине сервера>
отрабатывает только alertService ,точнее скорее всего отрабатывают оба
при вызове метода alert клиент подвисает до остановки сервиса сервера. Данное скорее всего происходит потому что сервер создал модальный диалог на невидимом десктопе и ждет пока я на невидимом десктопе нажму в диалоге ОК что не возможно.

Вот код серверной стороны:

STDMETHODIMP CServiceComObj::alert(BSTR bsHeader, BSTR bsBody)
{
USES_CONVERSION;
MessageBoxA(NULL,OLE2A(bsBody),OLE2A(bsHeader),MB_OK);
return S_OK;
}

STDMETHODIMP CServiceComObj::alertService(BSTR bsHeader, BSTR bsBody)
{
USES_CONVERSION;
MessageBoxA(NULL,OLE2A(bsBody),OLE2A(bsHeader),MB_OK | MB_DEFAULT_DESKTOP_ONLY);
return S_OK;
}

Вот код клиентской стороны
void CClientDlg::OnButton2()
{
CComBSTR CB1=CComBSTR(OLESTR("Контент Service Alert") );
CComBSTR CB2=CComBSTR(OLESTR("Заголовок Service Alert") );

CoInitialize(NULL);
CComPtr<IServiceComObj> pCP;
HRESULT hr=::CoCreateInstance(CLSID_ServiceComObj,NULL,CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER |CLSCTX_LOCAL_SERVER ,IID_IServiceComObj,(void**) &pCP );
if (SUCCEEDED(hr))
{
pCP->alertService(CB1,CB2);
}
else
{
::MessageBox(NULL,"Cant create", "Info", MB_OK);
}
CoUninitialize();
}

Вот как я делаю настройки
сервер:
ProbService -service
далее в DcomCnfg во вкладке security для ProbService делаю Use Custom ... и для всех трех RadioGroup и разрешаю группе EveryOne FullControl и Allow во всех трех RadioGroup

далее в свойствах ProbService в контрольной панели меняю юзеров в Logon as если необходимо.

клиент:
копирую серверное приложение на клиента
запускаю ProbService /RegServer

далее в DcomCnfg изменяю Run application on comp: <Комп сервера>
-А где же товарищи Кошки?
-Они не приехали....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.