Создание класса управления сервисом
От: nikson_svg  
Дата: 15.01.11 14:26
Оценка:
Всем привет. Вот пишу класс для программы. Который позволит зарегисрировать ее как сервис в Win.
Вот приведу код:

#ifndef _SYSTEMSERVICE_H
#define _SYSTEMSERVICE_H

#include <stdio.h>
#include <windows.h>

class CSystemService
{
    friend void __stdcall ServiceMain(int argc, char* argv[]);

public:
    CSystemService(LPTSTR lpServiceName);
    CSystemService();
    ~CSystemService();

    void Install();

private:
    SERVICE_TABLE_ENTRY m_ServiceTable[1];

    SERVICE_STATUS m_ServiceStatus;
    SERVICE_STATUS_HANDLE m_hStatus;

private:
    static void _stdcall ServiceMain(int argc, char* argv[]);
};

#endif // _SYSTEMSERVICE_H



#include "SystemService.h"

CSystemService::CSystemService(LPTSTR lpServiceName)
{
    m_ServiceTable[0].lpServiceName = lpServiceName;
    m_ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;

    if (!StartServiceCtrlDispatcher(m_ServiceTable))
        printf("START SERVICE CTRL DISPATCHER ERROR = %d\n", GetLastError());
}

CSystemService::CSystemService()
{
    //
}

CSystemService::~CSystemService()
{
    //
}

void __stdcall CSystemService::ServiceMain(int argc, char* argv[])
{
    //
}

void CSystemService::Install()
{
    //
    SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    if (!hSCManager)
        printf("OPEN SC MANAGER ERROR = %d\n", GetLastError());

    SC_HANDLE hService = CreateService(
        hSCManager,
        L"prg",
        L"prg",
        SERVICE_ALL_ACCESS,
        SERVICE_WIN32_OWN_PROCESS,
        SERVICE_DEMAND_START,
        SERVICE_ERROR_NORMAL,
        L"C:\\prg.exe",
        NULL, NULL, NULL, NULL, NULL
        );
    if (hService == NULL)
        printf_s("CREATE SERVICE = %d\n", GetLastError());
}


после выполнения программы с данным кодом получаю след. ошибки.

START SERVICE CTRL DISPATCHER ERROR = 1063
OPEN SC MANAGER ERROR = 5
CREATE SERVICE = 6
Для продолжения нажмите любую клавишу . . .


Помогите разобраться.

17.01.11 12:39: Перенесено из 'C/C++'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.