Некоторые службы автоматически останавливаются, если они не используются другими службами

Ошибка "НЕКОТОРЫЕ УСЛУГИ СТОП АВТОМАТИЧЕСКИ, ЕСЛИ ОНИ НЕ ИСПОЛЬЗУЮТСЯ ДРУГИМИ УСЛУГАМИ" при попытке запустить службу Windows.

У меня есть служба, которая не использует файл конфигурации службы Windows и использует статические свойства - она ​​отлично работает

Теперь я использую файл app.config и перестраиваю проект настройки + проект службы. Теперь я устанавливаю службу, а затем пытаюсь запустить службу - я получаю следующую ошибку:

НЕКОТОРЫЕ УСЛУГИ СТОП АВТОМАТИЧЕСКИ, ЕСЛИ ОНИ НЕ ИСПОЛЬЗУЮТ ДРУГИЕ УСЛУГИ

Служба регистрируется как локальная система.

Любой вход приветствуется, пожалуйста! Благодарю.

Ответ 1

Это, как правило, результат одной из двух вещей: либо (a) ваш метод OnStart() бросает исключение, либо (b) метод OnStart() не запускает поток для выполнения работы.

Если проблема (a), то очевидным решением является отладка службы, чтобы определить, что происходит не так. Как минимум, поставьте блок try-catch вокруг содержимого метода OnStart() и запишите ошибку в журнал системных событий при возникновении исключения. Затем вы можете увидеть подробности в средстве просмотра событий Windows.

Если проблема (b), вам нужно создать поток, который на самом деле что-то делает. Поток должен быть передним потоком (в отличие от фонового потока), чтобы предотвратить остановку службы. Типичный метод OnStart() выглядит следующим образом:

private System.Threading.Thread _thread;

protected override void OnStart(string[] args)
{
    try
    {
        // Uncomment this line to debug...
        //System.Diagnostics.Debugger.Break();

        // Create the thread object that will do the service work.
        _thread = new System.Threading.Thread(DoWork);

        // Start the thread.
        _thread.Start();

        // Log an event to indicate successful start.
        EventLog.WriteEntry("Successful start.", EventLogEntryType.Information);
    }
    catch (Exception ex)
    {
        // Log the exception.
        EventLog.WriteEntry(ex.Message, EventLogEntryType.Error);
    }
}

private void DoWork()
{
    // Do the service work here...
}

Ответ 2

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

Ответ 3

У меня была та же ошибка, которая была из-за того, что dll не была создана при запуске installUtil.cmd на моем serviceInstaller.msi. Чтобы исправить это, я должен был включить один из них => <File Id="Interception" Source="$(var.SourceDir)\Microsoft.Practices.Unity.Interception.dll"/> для каждой DLL, которую я ожидал в своем проекте и поместите его в мой файл Service.wxs. Вот так => <Fragment><DirectoryRef Id="ApplicationDirectory"><Component Id="ServiceID" Guid="$(var.ServiceGuid)"> *here* <closing tags...>. И убедитесь, что все dll включены в установочные команды x copy :)

Надеюсь это поможет!

Ответ 4

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