2015-11-25 3 views
0

Мне нужна служба, которая запускает автоматически запуск экземпляров SQL, находящихся на машине. Пока все хорошо, я могу заставить всех работать, но когда я запускаю машину с Windows 7, я получаю сообщение об ошибке 1053 (timeout). Но изменился тайм-аут до 180000, и ошибка продолжается.Служба SQL Server не запускается по коду

я тот же самый процесс в Windows 10 и работает на 100% экземпляров SQL Express 2005, 2008 и 2012.

Я не могу быть уверен, что проблема на самом деле Windows 7 или SQL Server 2005, который находится в это окна 7, если я запускаю процесс вручную, он запускается нормально.

Код:

public static bool StartServices() 
{ 
    try 
    { 
     bool startedWithSuccess = false; 
     foreach (var servico in GetInstances()) 
     { 
      using (servico) 
      { 
       if (servico.Status != ServiceControllerStatus.Running 
        && servico.Status != ServiceControllerStatus.StartPending) 
       { 
        servico.Start(); 

        startedWithSuccess = TimeoutHelper.RetryUntilSuccessOrTimeout(() => 
        { 
         servico.Refresh(); 
         return servico.Status != ServiceControllerStatus.Running ? false : true; 
        }, TIMEOUT_IN_MILLISECONS); 
       } 
       else 
       { 
        startedWithSuccess = true; 
       } 
      } 
     } 
     return startedWithSuccess; 
    } 
    catch (Exception) 
    { 
     throw new SqlServerStartServiceException(); 
    } 
} 

public static ServiceController[] GetInstances() 
{ 
    ServiceController[] services = ServiceController.GetServices().Where(x => x.ServiceName.Contains("SQL")).ToArray(); 
    var lista = services.Where(x => x.DisplayName.Contains("Agent") || 
             x.DisplayName.Contains("Browser") || 
             x.DisplayName.Contains("VSS") || 
             x.DisplayName.Contains("Active")).ToArray(); 
     return services.Except(lista).ToArray(); 
} 

Используя чистый старт хххх CMD и команда также работает.

+0

Выполняет ли пользователь, выполняющий эту службу как обеспечительные права для запуска и прекращения обслуживания? –

+0

Как я могу выполнить services.msc с правами администратора? В Windows 10 это не требуется? Но работает на W10. –

ответ

0

Я решил эту проблему вставлять зависимости в службу.

this.serviceInstaller.ServicesDependedOn = SqlServerServiceHelper.GetInstances().Select(x => x.ServiceName).ToArray(); 


public static ServiceController[] GetInstances() 
{ 
    ServiceController[] services = ServiceController.GetServices().Where(x => x.ServiceName.Contains("SQL")).ToArray(); 
    var servicesToRemove = services.Where(x => x.DisplayName.Contains("Agent") || 
              x.DisplayName.Contains("Browser") || 
              x.DisplayName.Contains("VSS") || 
              x.DisplayName.Contains("Active")).ToArray(); 
    return services.Except(servicesToRemove).ToArray(); 
} 
0

mcs будет работать как пользователь, это не то же самое, что и пользователь, с которым работает этот сервис. Перейдите к объекту правой кнопкой мыши> свойства и измените пользователя с локального компьютера на тот, у которого есть доступ. Попробуйте указать, работает ли это, чем проблема безопасности. technet

+0

Я испытаю это скоро здесь около 2 часов. Я форматирую ноутбук и снова установлю его, чтобы убедиться, что он не работает, сделайте то, что вы сказали. –

+0

Запуск от имени администратора и не повлиял. –

Смежные вопросы