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

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

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

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

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

textual
Листинг программы
  1. int main( int argc, char* argv[] )
  2. {
  3.     if ( !StartServiceCtrlDispatcher(DispatchTable) )
  4.         {
  5.             sprintf( g_Msg,"BanxPort StartServiceCtrlDispatcher error = %d", GetLastError() );
  6.         }
  7.  
  8.     return 0;
  9. }
  10.  
  11. // Second function to implement
  12. VOID WINAPI ServiceMain( DWORD argc, LPTSTR *argv )
  13. {
  14.  
  15.     ServiceStatus.dwServiceType        = SERVICE_WIN32_OWN_PROCESS;
  16.     ServiceStatus.dwCurrentState       = SERVICE_START_PENDING;
  17.     ServiceStatus.dwControlsAccepted   = SERVICE_ACCEPT_STOP;
  18.     ServiceStatus.dwWin32ExitCode      = 0;
  19.     ServiceStatus.dwServiceSpecificExitCode = 0;
  20.     ServiceStatus.dwCheckPoint         = 0;
  21.     ServiceStatus.dwWaitHint           = 0;
  22.  
  23.     ServiceStatusHandle = RegisterServiceCtrlHandler( "Name_Service", ServiceCtrlHandler );
  24.  
  25.     if ( ServiceStatusHandle == (SERVICE_STATUS_HANDLE) 0 )
  26.     {
  27.         sprintf(g_Msg, "Name_Service! RegisterServiceCtrlHandler() failed %d", GetLastError() );
  28.         return;
  29.     }
  30.  
  31.     ServiceStatus.dwCurrentState       = SERVICE_RUNNING;
  32.     ServiceStatus.dwCheckPoint         = 0;
  33.     ServiceStatus.dwWaitHint           = 0;
  34.  
  35.     if ( !SetServiceStatus( ServiceStatusHandle, &ServiceStatus ) )
  36.     {
  37.         sprintf( g_Msg,"BanxPort! SetServiceStatus() error %ld", GetLastError() );
  38.         WriteInLogFile(g_Msg);
  39.     }
  40.  
  41.     g_isRunning = true;
  42.  
  43.     sprintf( g_Msg, "Just before processing Loop..." );
  44.     WriteInLogFile(g_Msg);
  45.  
  46.     while (1)
  47.     {
  48.         // тут находится наш код, для примера просто сигналы через динамик
  49.     Beep(1000, 200);      
  50.     Sleep(1000);
  51.        
  52.     if ( !g_isRunning )
  53.         {
  54.             break;
  55.         }
  56.     }
  57.  
  58.     ServiceStatus.dwCurrentState = SERVICE_STOPPED;
  59.    
  60.     // Send current status.
  61.     if (!SetServiceStatus(ServiceStatusHandle, &ServiceStatus))
  62.     {
  63.         sprintf(g_Msg,"BanxPort! SetServiceStatus error %ld", GetLastError() );
  64.         WriteInLogFile( g_Msg );
  65.     }
  66.  
  67.     return;
  68. }
  69.  
  70. VOID WINAPI ServiceCtrlHandler(DWORD dwControl)
  71. {
  72.  
  73.     switch(dwControl)
  74.     {
  75.         case SERVICE_CONTROL_PAUSE:
  76.             ServiceStatus.dwCurrentState = SERVICE_PAUSED;
  77.             break;
  78.  
  79.         case SERVICE_CONTROL_CONTINUE:
  80.             ServiceStatus.dwCurrentState = SERVICE_RUNNING;
  81.             break;
  82.  
  83.         case SERVICE_CONTROL_STOP:
  84.            
  85.         ServiceStatus.dwWin32ExitCode = 0;
  86.             ServiceStatus.dwCurrentState  = SERVICE_STOP_PENDING;
  87.             ServiceStatus.dwCheckPoint    = 0;
  88.             ServiceStatus.dwWaitHint      = 0;
  89.  
  90.             g_isRunning = false;
  91.  
  92.             if ( !SetServiceStatus( ServiceStatusHandle, &ServiceStatus) )
  93.             {
  94.                 sprintf(g_Msg,"Name_Service! SetServiceStatus() error %ld",GetLastError() );
  95.                 WriteInLogFile(g_Msg);
  96.             }
  97.  
  98.             sprintf(g_Msg, "Name_Service! leaving handler ", 0 );
  99.             WriteInLogFile(g_Msg);
  100.            
  101.             return;
  102.  
  103.         case SERVICE_CONTROL_INTERROGATE:
  104.             break;
  105.  
  106.         default:
  107.             sprintf(g_Msg, "Name_Service unrecognized control code %ld", dwControl );
  108.     }
  109.  
  110.     // Send current status.
  111.     if ( !SetServiceStatus(ServiceStatusHandle, &ServiceStatus) )
  112.     {
  113.         sprintf(g_Msg,"Name_Service! SetServiceStatus() error %ld", GetLastError() );
  114.         WriteInLogFile( g_Msg );
  115.     }
  116.  
  117.     return;
  118. }

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


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

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

7   голосов , оценка 3.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы