ServiceBase.RequestAdditionalTime () в .Net 1.1 - PullRequest
1 голос
/ 23 ноября 2011

Мне нужно отложить 30-секундный тайм-аут при перезапуске службы .Net 1.1. По логистическим причинам я не могу перейти на .Net 2.0, чтобы воспользоваться методом ServiceBase.RequestAdditionalTime ().

Одним из обходных путей является вызов SetServiceStatus в начале кода. Однако для целей зависимости мне нужно выполнить весь мой код до того, как это будет установлено.

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

Есть ли какой-либо эквивалент вызова метода ServiceBase.RequestAdditionalTime () в .Net 1.1?

1 Ответ

1 голос
/ 23 ноября 2011

Если вы посмотрите на исходный код метода ServiceBase.RequestAdditionalTime в .NET 2.0 (используя инструмент декомпиляции, такой как ILSpy ), вы увидите, что концептуально он выполняет два вещи:

  1. Назначает указанное количество миллисекунд для поля dwWaitHint структуры SERVICE_STATUS
  2. Вызывает SetServiceStatus Win32, передавая новую SERVICE_STATUS структуру

Вы можете реализовать ту же функциональность в .NET 1.1, используя P / Invoke для взаимодействия с Win32 API.

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