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