2015-10-07 15 views
0

Я пишу приложение, чтобы автоматически перезапустить службу SQL. В основном, это те шаги, которые я делаю:SQL служба не запускается должным образом с помощью ServiceController

  1. Закрыть приложение службы
  2. Остановка службы SQL
  3. Запуск SQL
  4. Запуск приложения

Проблема у меня есть с запуском приложения , Похоже, что приложение запускается до службы SQL, тем самым вызывая ошибку подключения к базе данных. Я делаю проверку на статус службы по следующим направлениям, но она по-прежнему не работает:

service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); 
if (service.Status == ServiceControllerStatus.Stopped) 

Код:

static void Main(string[] args) 
    { 
     PrintMessage("arg 0: " + args[0]); 
     PrintMessage("arg 1: " + args[1]); 
     PrintMessage("arg 2: " + args[2]); 

     Console.Title = "SQL Server Restart"; 
     PrintMessage("Commencing SQL Server restart. Please wait. . ."); 

     string serverInstance = args[0]; 

     ServiceController service = new ServiceController(serverInstance); 

     try 
     { 
      if (service.Status == ServiceControllerStatus.Running) 
      { 
       PrintMessage("Checking server status"); 
       TimeSpan timeout = TimeSpan.FromMinutes(5); 
       PrintMessage("Stoppping server"); 
       service.Stop(); 
       service.Refresh(); 
       service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); 

       if (service.Status == ServiceControllerStatus.Stopped) 
       { 
        PrintMessage("Starting server"); 
        service.Start(); 
        service.Refresh(); 
        service.WaitForStatus(ServiceControllerStatus.Running); 

        if (service.Status == ServiceControllerStatus.Running) 
        { 
         PrintMessage("Server started"); 

         //Restart application 
         if (args[2] == "False") 
         { 
          PrintMessage("Press any key to continue. . ."); 

          Console.ReadKey(); 
          Environment.Exit(0); 
         } 
         else 
         { 
          PrintMessage("Starting Application"); 
          ProcessStartInfo info = new ProcessStartInfo(); 
          info.FileName = args[1]; 
          info.WorkingDirectory = Path.GetDirectoryName(info.FileName); 
          Process process = new Process(); 
          process.StartInfo.UseShellExecute = false; 
          Process.Start(info); 
          PrintMessage("Application started"); 
         } 
        } 
       } 
      } 
     } 

     catch (Exception ex) 
     { 
      Console.WriteLine("Base Exception: " + ex.GetBaseException()); 
      Console.WriteLine("Inner Exception: " + ex.InnerException); 

      Console.WriteLine(ex.Message); 
     } 

     PrintMessage("Press any key to continue. . ."); 

     Console.ReadKey(); 


    } 
+0

Какова Ваша цель? Его приложение? –

ответ

0

Так вы говорите, что приложение работает в «ошибка соединения базы данных» , SQL-сервер может быть просто не готов, когда приложение пытается подключиться. Работает ли ваш код, если вы добавили 30 секундную паузу непосредственно перед запуском приложения?

Я видел эту проблему с помощью услуг, которые сигнализируют состояние Выполнение слишком рано (в обход Начальное состояние). Возможно, SQL-сервер делает ту же ошибку.