2010-01-31 2 views
1

У меня есть медленный встроенный компьютер под управлением Windows 2000, и у меня возникли проблемы с надежностью запуска службы. Между выдачей команды «net start xxx» и сообщением «служба xxx» начинается ОЧЕНЬ заметная задержка. Это приводит к тому, что мой сервис не запускается.Запущена команда net start?

Мое обслуживание регулярно не может даже получить команду «Пуск» (я регистрирую это и вижу, что он никогда не возникает).

Я попытался повторить это на гораздо более быстрой коробке XP, но задержка, конечно, намного короче. Однако я сделал умышленное добавление сна (60000) в обработчик Onstart - для имитации медленного запуска.

В этом поле (XP) - даже если команда пустого запуска возвращает «сервис xxx не может быть запущен (примерно через 20 секунд), служба, похоже, продолжает работу и действительно начинает работу. За это время сервис-менеджер сообщает «начало» - до тех пор, пока мой сон (60000) не завершится, и отчеты диспетчера служб не начнутся.

Я также попытался установить запись реестра «ServicesPipeTimeout» на 65000 - и это, похоже, ничего не меняет: -O - да, я перезагрузился ;-).

Есть ли у кого-нибудь идеи, почему это происходит, пожалуйста. Несмотря на то, что я установил свой раздел реестра «ServicesPipeTimeout» на 65000 - сетевой запуск завершился с ошибкой через 20 или около того секунд: -O.

Похоже, что если мне удастся получить команду запуска, выпущенную до истечения этой команды «net start», моя служба действительно запустится. Вот почему я попытался установить запись реестра «ServicePipeTimeout» на 65000, но, похоже, это не имеет никакого значения.

NB Приложение для моего приложения написано на C# с использованием VS2008, настроенного на .Net Framework V2 - как все, что могут поддерживать старые 2000-ящики.

Большое спасибо - всегда с надеждой ....

С уважением

Graham

ответ

1

Ну, это на самом деле является ServicePipeTimeout, который управляет тайм-аут. Непонятно, когда этот таймер таймаута начинает тикать. Тот факт, что ваш OnStart() не будет вызван, указывает, что он начинается, когда SCM создает этот процесс. Следующий мысленный скачок, который можно сделать, заключается в том, что 30-секундный тайм-аут по-прежнему применяется к времени начала процесса, независимо от значения реестра.

Коробка находится в очень плохом состоянии, если время холодного запуска .NET более 30 секунд. Время холодного запуска зависит от производительности жесткого диска, примерно 85% времени тратится на поиск и загрузку DLL. Как обычно. Это возможно, если в коробке никогда не было дефрагментированного жесткого диска, и вы недавно установили .NET на нем. Это приведет к тому, что кластеры файлов .NET будут разбросаны по всему диску, что потребует многих движений чтения. Это может значительно снизить пропускную способность данных, как килобайт в секунду, если каждый кластер находится на другом треке.

Фиксация этого может быть такой же простой, как дефрагментация привода. Задавайте вопросы о том, что в superuser.com

0

Хммм,

Я сделал больше работы по этому вопросу и его на самом деле не .Net, которая берет свое время, его интерфейс ServiceController: -O.

Чтобы обойти эту проблему, написал приложение «Контроллер» (с использованием .Net 2), а удержание - в вызове sc.start '- это было вызвано сразу после первой записи в журнале, но я получил исключение ~ 30 секунд спустя

02 фев. 2010 07: 15: 26: 752, CarwashClient остановлен 02 фев. 2010 07:15:57: 556, StartService(): Исключение: не удается запустить службу CarwashClient на компьютере. '. 02 фев. 2010 07: 15: 57: 586, StartService(): Исключение: служба не ответила на запрос запуска или управления своевременно

Теперь, когда приложение-контроллер использует .Net, тогда большинство необходимые библиотеки уже были загружены.

Мой сервис никогда не видел события OnStart - поскольку он также регистрируется, и в журнале ничего не появляется.

У моего сервиса также нет зависимостей - он просто не получает событие OnStart: -O.

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

Очевидно, что существует некоторая значительная задержка загрузки с помощью библиотеки servicecontroller, которую я предполагаю: -O.

Чтобы ответить на другие поднятые точки, его единственный 300-мегагерцовый процессор во встроенном ПК :-). Тем не менее - это не должно быть так медленно. Хороший вопрос об дефрагментаторе, хотя его пока что произошло на двух из двух ящиков: -O.

Благодаря

Graham

Смежные вопросы