Служба Windows, написанная на D7, не может быть запущена под WinServer2008 64 бит после перезапуска - PullRequest
1 голос
/ 23 февраля 2012

Я написал сообщение несколько месяцев назад о проблеме, с которой я боролся. Вот ссылка:

0x0eedfade kernelbase.dll модуль отказа в службе Windows d7

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

Сегодня я включил madexcept в исполняемый файл и получил при запуске:

compiled with     : Delphi 7
madExcept version : 3.0l
callstack crc     : $dbabc0aa, $f5cfd533, $f5cfd533
exception number  : 1
exception class   : EOutOfResources
exception message : Error creating window class.

main thread ($c88):
004a7419 +09d ServiceTest.exe Forms                  6322 +20 TApplication.CreateHandle
004a7206 +1a6 ServiceTest.exe Forms                  6250 +32 TApplication.Create
00493fc3 +10b ServiceTest.exe Controls              10924 +10 InitControls
0049411b +02f ServiceTest.exe Controls              10943  +2 initialization
004048c0 +044 ServiceTest.exe System                          InitUnits
00404926 +03a ServiceTest.exe System                          @StartExe
00407392 +03a ServiceTest.exe SysInit                         @InitExe
004ed991 +011 ServiceTest.exe ServiceTest    62  +0 initialization
75f13675 +010 kernel32.dll                                              

Ну, насколько я помню, он даже не идет в конец раздела файла проекта. Мне просто интересно, исчерпаны ли ресурсы системы, но: системные дескрипторы на хорошем уровне, память тоже.

Любое предложение, что я еще могу сделать?

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

1 Ответ

2 голосов
/ 23 февраля 2012

Я думаю, что у вас есть утечка ресурсов в вашем приложении / услуге.

вам нужно проверить, Window Desktop Heap, вот одна мс КБ статья Недостаточно памяти "появляется сообщение об ошибке, когда выу нас есть большое количество программ, работающих .

Мы видели очень похожие проблемы со службами, которые не работают или ведут себя очень странно (например, сокеты становятся глухими), и отслеживали его до заполнения DesktopHeap, когдаПричина, по которой он работает при работе в качестве приложения, заключается в том, что куча рабочего стола для приложений НАМНОГО больше, чем куча, используемая для служб.

Эта ссылка Обзор кучи рабочего стола объясняет, для чего она используется.

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

Необходимо убедиться, что ваши службы используют как можно меньше TForms (желательно нет).

Вы можете изменить размер Services Desktop Heap в реестре, ссылки expКак, например, это может быть использовано, чтобы помочь найти проблему (обычно уменьшая ее, чтобы быстрее вызвать ошибку), или увеличить ее, если вы используете много сервисов.

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

...