Здравствуйте.
Пытаюсь написать сервис.
Сама прога консольная, на Visual 2005.
Инсталл сервиса проходит на ура.
int InstallService()
{
schSCManager = OpenSCManager(
NULL, // local machine
NULL, // ServicesActive database
SC_MANAGER_CREATE_SERVICE); // full access rights SC_MANAGER_ALL_ACCESS
if (NULL == schSCManager)
return -1;
schService = CreateService(
schSCManager,
ServiceName,
lpszDisplayName,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
lpszBinaryPathName,
NULL,
NULL,
NULL,
NULL,
NULL);
if (schService == NULL)
return -2;
else
return 0;
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
}
Здесь кстати тоже небольшой вопросик. Нужно ли делать CloseServiceHandle(schSCManager)?
Потом вызываю:
int RunService()
{
schSCManager = OpenSCManager(
NULL,
NULL,
STANDARD_RIGHTS_REQUIRED);
if (NULL == schSCManager)
return -1;
schService = OpenService(
schSCManager,
ServiceName,
SERVICE_START);
if (schService == NULL)
return -2;
if (!StartService(
schService,
0,
NULL) )
return -3;
CloseServiceHandle(schService);
return 0;
}
На вызове
StartService(schService,0,NULL)
Происходит ошибка. Видимо потому, что виндоус не достучался до Хендлера.
Вначале объявляю
SERVICE_TABLE_ENTRY DispTbl[] =
{
{ ServiceName, (LPSERVICE_MAIN_FUNCTION) ServStart},
{ NULL , NULL}
};
А вот куда пихать
if (!StartServiceCtrlDispatcher(DispTbl))
printf("oblom-StartServiceCtrlDispatcher.\n");
Совершенно не понимаю. Много всяких статей, примеров....
Пытался использовать пример
http://ishodniki.ru/list/info.php?cat=6&id=1267&show=cpp_system&pr=sys_nt
не работает...
Все остальные с окошками и т.д.
А я хочу консольный и без MFC.
Помогите бедному студенту, please.
Заранее благодарю, Дмитрий.
24.07.06 06:24: Перенесено модератором из 'C/C++. Прикладные вопросы' — Odi$$ey