Служба Windows останавливается автоматически

1) Избегайте формата строки без ширины, такого как "%[aeiou]" - он подвержен переполнению.

2) Проверьте scanf() возвращаемое значение.

Чтобы избежать ограничений, таких как 10, считывайте ввод в цикле.

int main(void) {
    char z[10];
    while (scanf("%9[aeiou]",z) == 1) {
      printf("%s",z);
    }
    printf("\n");
    return 0;
}

Если код должен читать ввод, например xxxaxxxaxxx, и выводить aa только с scanf(), требуется больше работы.

Чтобы было ясно, scanf() не лучший инструмент для достижения этой цели.

Некоторое непроверенное представление о том, что нужно.

int main(void) {
  do {
    int cnt; 
    char z[10];
    while ((cnt = scanf("%9[aeiou]",z)) == 1) {
      printf("%s",z);
    }
    if (cnt == EOF) {
      break;
    }

    // Find the character that stopped scanning
    if ((cnt = scanf("%1[^aeiou]",z)) == 1) {
      if (z[0] == '\n') {
        break;
      }
    } else {
      break;
    }
  }
  printf("\n");
  return 0;
}
30
задан bluish 11 May 2012 в 12:17
поделиться

6 ответов

Или Вы не запускаете потоков на методе OnStart, чтобы сделать работу, или существует исключение, повышенное в рамках Вашего метода OnStart.

, Если исключение выдается, это появится в Windows Event log. Windows Event log является хорошим местом для запуска в любом случае.

Обычно метод OnStart похож на это:

Thread _thread;

protected override void OnStart(string[] args)
{
    // Comment in to debug
    // Debugger.Break()

    // Do initial setup and initialization
    Setup();

    // Kick off a thread to do work
    _thread = new Thread(new MyClass().MyMethod)
    _thread.Start();

    // Exit this method to indicate the service has started
}
38
ответ дан Robert Wagner 28 November 2019 в 00:02
поделиться

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

Однажды начавшись, по какой-то причине он уходит. Вам нужно выяснить, почему это так. Добавьте некоторую отладку, чтобы сообщить вам, что она работает и известны случаи выхода. Если это не выявляет проблему, добавьте отладку, чтобы вы знали, что она все еще работает и работает в обратном направлении с момента остановки.

6
ответ дан bluish 28 November 2019 в 00:02
поделиться

Вы прослеживаете отладочную информацию? Скорее всего, исключение выдается во время Вашей инициализации. Я проследил бы все Ваши исключения и использовал бы Debugview для просмотра их.

3
ответ дан Mike_G 28 November 2019 в 00:02
поделиться

У меня возникла та же проблема при запуске JBoss, затем я изменил переменную JAVA_HOME, она работала для меня. Это была версия JBoss, которая не поддерживает 1.6, она поддерживает 1.5.

1
ответ дан bluish 28 November 2019 в 00:02
поделиться

В моем случае, метод в моем сервисе вызывался рекурсивно (так как условие завершения не было истинным), и по истечении определенного времени моя служба была остановлена.

0
ответ дан umesh shukla 28 November 2019 в 00:02
поделиться

У меня была аналогичная проблема , потому что мои журналы событий были заполнены , и служба не могла писать в них. Таким образом, было невозможно выполнить отладку путем поиска сообщений в средстве просмотра событий. Я поставил try / catch и выгружал исключение в файл. Мне пришлось изменить настройки в моих журналах, чтобы заполнять их по мере необходимости, а не каждые 7 дней, и это позволило запустить службы.

Конечно, корень проблемы для меня в том, что у меня проблема с драйвером nVidia, из-за которой мои журналы событий переполняются, и теперь у меня, вероятно, не хватает места на диске, но это уже другая проблема.

3
ответ дан 28 November 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: