15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Динамический запуск сервера MS SQL

Следующий пример показывает, как на C++ динамически запускать MS SQL Server в Windows NT. Всё, что для этого потребуется, это включить в проект w95scm.lib, которая поставляется с SQL 7.0 CD.

#include "wn95scm.h" //находится на Sql7.0 CD
BOOL  StartSqlServer(LPSTR szErrorMsg)
{
     LPSTR       szService = "MSSQLServer";
     DWORD       dwServiceState, dwErr;
     BOOL        bControlSuccessful;

     bControlSuccessful = TRUE;    // состояние сервиса.
     dwServiceState = SQLSCMGetLocalServiceState(szService, &dwErr);
     while ((dwServiceState != 0) && (bControlSuccessful == TRUE))
     {
          if (dwServiceState == SERVICE_RUNNING)
               break;
          switch (dwServiceState)
          {
               case SERVICE_PAUSED:     // если в режиме паузы, то
                                        // даём команду продолжить работу.
                    bControlSuccessful =  SQLSCMLocalServiceControl(szService,
SQLSCMCmd_CONTINUE,&dwErr, 0, NULL);
                    break;
               case SERVICE_STOPPED:     // Если остановлен, то запускаем сервис
                    bControlSuccessful =  SQLSCMLocalServiceControl(szService,
SQLSCMCmd_START, &dwErr, 0, NULL);
                    break;
               default:// Если состояние 0, то возникла ошибка при определении
                       // состояния сервиса.
                    if (dwServiceState == 0)
                    {    // Error. Return failure.
                         sprintf(szErrorMsg, "Error %lu on attempt to determine
service state.", dwErr);
                         return (FALSE);
                    }
          }
          Sleep(5);
          dwServiceState = SQLSCMGetLocalServiceState(szService, &dwErr);
     }
     if (bControlSuccessful)
     {
          sprintf(szErrorMsg, "Error %lu returned on attempt to change service
state.", dwErr);
     }
     return (bControlSuccessful ? TRUE : FALSE);
}