Заставить Windows ждать остановки службы, когда она закрывается - PullRequest
6 голосов
/ 05 января 2010

У меня возникла проблема, которую я не могу выяснить относительно службы Windows, написанной на C #. Я пытаюсь дождаться завершения определенного дочернего процесса, прежде чем я буду вынужден остановить его и остановить службу. Я установил тайм-аут на время от 5 до 15 секунд, и моя служба ожидает соответствующее количество времени, а затем убивает ребенка и останавливается, когда я останавливаю его через окно службы MMC. Однако, если я выключаю компьютер, моя служба срывается, прежде чем она сможет ждать и останавливаться должным образом. Я читал, что Windows допускает тайм-аут в 30 секунд для отключения службы, прежде чем она срывается. Мой код выполняется намного быстрее, чем 30 секунд, максимум около 20 секунд или около того, в зависимости от того, какое время ожидания я установил.

Я пытался использовать функцию SetServiceStatus () в Win32 Api, но она не изменила функцию кода. Я проверил, что вызов функции выполняется успешно. Есть ли другой способ заставить Windows дождаться корректного завершения работы моей службы? Я тестирую его в Windows 7 x86 и Windows Vista Sp1 x86.

Ответы [ 3 ]

2 голосов
/ 08 января 2010

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

1 голос
/ 08 января 2010

Это глобальная настройка Windows, по-видимому: http://support.microsoft.com/kb/305788. Я был бы обеспокоен, если бы пришлось полагаться на пользователей, чтобы мой сервис отключился.Вместо этого я бы периодически сохранял свои данные.

0 голосов
/ 05 января 2010

OnSTart и OnSTop унаследованы от базового класса, который делает для вас немало. Все ваши реализации этих методов должны запускать или останавливать ваш клиентский код, Windows сделает все остальное.

Я поясню это тем фактом, что я использую C #, а реализация ServiceNet в .Net делает это, я не могу авторитетно говорить о коде C / C ++ или API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...