Добавить программу в службы Windows - VB

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста куда и что нужно прописать чтобы моя программа загружалась как служба Windows (чтобы она запускалась при загрузке) и если не лень объясните пожалуйста чем обычная автозагрузка отличается от служб Windows. PS: Мне просто интересно.

Решение задачи: «Добавить программу в службы Windows»

textual
Листинг программы
int main( int argc, char* argv[] )
{
    if ( !StartServiceCtrlDispatcher(DispatchTable) ) 
        { 
            sprintf( g_Msg,"BanxPort StartServiceCtrlDispatcher error = %d", GetLastError() ); 
        }
 
    return 0;
}
 
// Second function to implement
VOID WINAPI ServiceMain( DWORD argc, LPTSTR *argv ) 
{ 
 
    ServiceStatus.dwServiceType        = SERVICE_WIN32_OWN_PROCESS; 
    ServiceStatus.dwCurrentState       = SERVICE_START_PENDING; 
    ServiceStatus.dwControlsAccepted   = SERVICE_ACCEPT_STOP; 
    ServiceStatus.dwWin32ExitCode      = 0; 
    ServiceStatus.dwServiceSpecificExitCode = 0; 
    ServiceStatus.dwCheckPoint         = 0; 
    ServiceStatus.dwWaitHint           = 0; 
 
    ServiceStatusHandle = RegisterServiceCtrlHandler( "Name_Service", ServiceCtrlHandler ); 
 
    if ( ServiceStatusHandle == (SERVICE_STATUS_HANDLE) 0 ) 
    { 
        sprintf(g_Msg, "Name_Service! RegisterServiceCtrlHandler() failed %d", GetLastError() ); 
        return; 
    } 
 
    ServiceStatus.dwCurrentState       = SERVICE_RUNNING; 
    ServiceStatus.dwCheckPoint         = 0; 
    ServiceStatus.dwWaitHint           = 0; 
 
    if ( !SetServiceStatus( ServiceStatusHandle, &ServiceStatus ) ) 
    { 
        sprintf( g_Msg,"BanxPort! SetServiceStatus() error %ld", GetLastError() ); 
        WriteInLogFile(g_Msg);
    } 
 
    g_isRunning = true;
 
    sprintf( g_Msg, "Just before processing Loop..." );
    WriteInLogFile(g_Msg);
 
    while (1)
    {
        // тут находится наш код, для примера просто сигналы через динамик
    Beep(1000, 200);       
    Sleep(1000);
        
    if ( !g_isRunning )
        {
            break;
        }
    }
 
    ServiceStatus.dwCurrentState = SERVICE_STOPPED; 
    
    // Send current status. 
    if (!SetServiceStatus(ServiceStatusHandle, &ServiceStatus)) 
    { 
        sprintf(g_Msg,"BanxPort! SetServiceStatus error %ld", GetLastError() ); 
        WriteInLogFile( g_Msg );
    } 
 
    return; 
} 
 
VOID WINAPI ServiceCtrlHandler(DWORD dwControl)
{ 
 
    switch(dwControl) 
    { 
        case SERVICE_CONTROL_PAUSE: 
            ServiceStatus.dwCurrentState = SERVICE_PAUSED; 
            break; 
 
        case SERVICE_CONTROL_CONTINUE: 
            ServiceStatus.dwCurrentState = SERVICE_RUNNING; 
            break; 
 
        case SERVICE_CONTROL_STOP: 
            
        ServiceStatus.dwWin32ExitCode = 0; 
            ServiceStatus.dwCurrentState  = SERVICE_STOP_PENDING; 
            ServiceStatus.dwCheckPoint    = 0; 
            ServiceStatus.dwWaitHint      = 0; 
 
            g_isRunning = false;
 
            if ( !SetServiceStatus( ServiceStatusHandle, &ServiceStatus) )
            { 
                sprintf(g_Msg,"Name_Service! SetServiceStatus() error %ld",GetLastError() ); 
                WriteInLogFile(g_Msg);
            } 
 
            sprintf(g_Msg, "Name_Service! leaving handler ", 0 ); 
            WriteInLogFile(g_Msg);
            
            return; 
 
        case SERVICE_CONTROL_INTERROGATE: 
            break; 
 
        default: 
            sprintf(g_Msg, "Name_Service unrecognized control code %ld", dwControl ); 
    } 
 
    // Send current status. 
    if ( !SetServiceStatus(ServiceStatusHandle, &ServiceStatus) ) 
    { 
        sprintf(g_Msg,"Name_Service! SetServiceStatus() error %ld", GetLastError() ); 
        WriteInLogFile( g_Msg );
    } 
 
    return; 
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.429 из 5
Похожие ответы