Windows не удалось запустить службу на Win Server 2008 R2 с пакетом обновления 1 (ошибка 1053)

Этот вопрос, как представляется, широко обсуждается, но у меня проблемы с поиском решения в моем конкретном случае.

Моя служба настроена для работы под учетной записью Local System. На моей первой машине с установленной Windows 7 SP1 (64-разрядная версия) все работает так, как ожидалось. Но сразу после того, как я попытаюсь запустить службу на своей второй машине с Windows Server 2008 R2 SP1 (64-разрядная версия), даже не второй проход, и я столкнулся с этой досадной ошибкой:

Windows could not start the ProService service on Local Computer
Error 1053: The service did not respond to the start or control request in a timely fashion

System Log показывает 2 записи:

The ProService service failed to start due to the following error: 
The service did not respond to the start or control request in a timely fashion.

и

A timeout was reached (30000 milliseconds) while waiting for the ProService service to connect.

Реализация выглядит следующим образом:

Program.cs:

static void Main()
{
    AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
    ServiceBase.Run(new ServiceBase[] { new ProService() });
}

static void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    if (e != null && e.ExceptionObject != null)
    {
        Logger.Record(e.ExceptionObject);
    }            
}

ProService.cs:

public ProService()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    try
    {
        RequestAdditionalTime(10000);
        FireStarter.Instance.Execute();
    }
    catch (Exception e)
    {
        Logger.Record(e);
        throw;
    }            
}

Метод OnStart только начинает новый поток, поэтому для выполнения требуется почти полная загрузка времени. Я использовал оператор RequestAdditionalTime на всякий случай - отклонить этот вопрос как источник моей проблемы. Кроме того, как вы можете видеть, я обрабатываю все исключения, но никакое исключение не записывается в мой журнал событий службы во время запуска (кстати, ведение журнала работает на первом компьютере win7). Как узнать, что происходит?

Ответы

Ответ 1

Я понял, что происходит в несколько шагов:

  • Я написал консольное приложение - оболочку для того, что в основном сделано в OnStart методе из службы.
  • Я выполнил консольное приложение - приложение запускалось нормально.
  • Я скопировал содержимое файла конфигурации службы в консольный файл конфигурации приложения.
  • Я снова выполнил консольное приложение - приложение прерывается молча и сразу (на удивление похоже на наше поведение службы, что-то не так).
  • Я сравнил 2 конфигурации - от службы и оригинал от консольного приложения. В результате я нашел некоторые отличия. Среди прочего, была такая запись - источник проблемы (после удаления все работает):

    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    

Итак, в основном у меня был устаревший конфигурационный файл. Раньше служба была скомпилирована в .NET 4.5, затем я изменил фреймворк на 4.0 и развернул файлы на сервер, но оставил предыдущий файл конфигурации (я изменил целевую структуру, потому что моя машина для разработки имела .NET 4.5, а сервер не). Я бы не подумал, что показанные строки скроют все проблемы без какой-либо разумной информации, что поможет отслеживать беспорядок.

Ответ 2

Проверьте отсутствие зависимостей /DLL.

Если вы еще этого не сделали, позвольте вашей службе быть вызванным как обычное приложение (отличный метод для долгосрочной отладки) и посмотрите, правильно ли он запускается на вашем компьютере под управлением Windows 2008.

Если это работает, тогда может возникнуть проблема с запуском в учетной записи LocalSystem. Перейдите к запуску приложения из командной строки, запущенной в учетной записи LocalSystem (пример настройки здесь).

Ответ 3

Я попробовал следующее исправление, которое было предоставлено в этой ссылке

  • Нажмите "Пуск", выберите "Выполнить", введите "regedit" и нажмите "ОК".

  • Найдите и выберите следующий подраздел реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

  • В правой панели найдите запись ServicesPipeTimeout.
    Примечание. Если запись ServicesPipeTimeout не существует, вы должны ее создать. Чтобы сделать это, выполните следующие действия:
    а. В меню "Правка" выберите "Создать", а затем "Значение DWORD".
    б. Введите ServicesPipeTimeout и нажмите клавишу ВВОД.
  • Щелкните правой кнопкой мыши ServicesPipeTimeout и выберите команду Изменить.
  • Нажмите "Десятичный", введите 60000 и нажмите "ОК".
    Это значение представляет время в миллисекундах до истечения срока службы.
  • Перезагрузите компьютер.

Но у меня возникла проблема с запуском службы.

Исправление, которое сработало для меня, было

  • Перейдите в services.msc
  • Дважды щелкните службу, которую вы пытаетесь запустить.
  • Взять вкладку "Вход в систему" ​​
  • Изменен. Войдите в систему как: в локальную учетную запись системы.
  • Пробовал запуск службы после этого изменения (все еще дал ошибку 1053)
  • Снова запустил вкладку "Вход в систему", изменил ее на "Сетевая служба" (дал случайный новый пароль).
  • Попробовал снова запустить службу. (Служба полностью запущена)

Ответ 4

Я попробовал следующие шаги. Он работал как шарм.

1.Возможность services.msc 2. Дважды щелкните службу, которую вы пытаетесь запустить. 3.Выполните вкладку "Вход в систему" 4.Changed Войдите в систему как: в учетную запись локальной системы. 5. Попробуйте начать сервис после этого изменения (все еще дал ошибку 1053) 6. Верните вкладку "Вход в систему" ​​еще раз, изменив ее на "Сетевая служба" (дал новый пароль) 7. Попробуйте снова начать службу (услуга началась отлично).

Но я просто хочу знать, в чем проблема.

Ответ 5

После установки службы я должен предоставить полное разрешение на управление (Everyone) для папки установки. Затем моя служба начнет совершенствоваться.