Некоторые службы останавливаются автоматически, если они не используются другими службами. - PullRequest
18 голосов
/ 15 июня 2011

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

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

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

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

Сервис входит в систему как локальная система.

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

Ответы [ 3 ]

36 голосов
/ 15 июня 2011

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

Если проблема в (а), то очевидным решением является отладка службы, чтобы определить, что идет не так. Как минимум, поместите блок 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's 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...
}
3 голосов
/ 02 июля 2015

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

0 голосов
/ 19 июня 2018

У меня была та же ошибка, которая была из-за того, что 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 :)

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

...