Добавить программу в службы 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д