StartServiceCtrlDispatcher проблема с сервисами
От: xadd  
Дата: 23.07.06 20:23
Оценка:
Здравствуйте.
Пытаюсь написать сервис.
Сама прога консольная, на 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.