Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 696

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Подскажите в чем может быть проблема:
Есть сервис, есть необходимость на одной машине запустить несколько копий таких сервисов (на разные БД). Для этого пытаюсь сделать динамичекое назначение имени сервиса при выполнении /install.
Для этого сделал вот такой код (см. приложение).
При установке приложения и его удалении - все нормально, имя сервиса регистрируется нормально, удаляется сервис тоже нормально.
НО: после добавления такого кода, запуск сервиса происходит очень долго, в результате выдает ошибку, о том что сервис запустить не удалось. Однако процесс в диспетчере задач сидит.

Без приведенного кода сервис работает нормально.

Приложение:
  1. procedure TsmsMailSvc.ServiceBeforeInstall(Sender: TService);
  2. var
  3. SERVICE_NAME: String;
  4. begin
  5.  
  6. SERVICE_NAME := Trim(ExtractFileName(ParamStr(0)));
  7. SERVICE_NAME := Copy(SERVICE_NAME, 1, Length(SERVICE_NAME)-4);
  8. GMainLog.LogMsg('AfterConstruction: service name is "'+SERVICE_NAME+'"');
  9.  
  10. Name := SERVICE_NAME;
  11. DisplayName := SERVICE_NAME;
  12. end;
  13.  
  14. procedure TsmsMailSvc.ServiceBeforeUninstall(Sender: TService);
  15. var
  16. SERVICE_NAME: String;
  17. begin
  18.  
  19. SERVICE_NAME := Trim(ExtractFileName(ParamStr(0)));
  20. SERVICE_NAME := Copy(SERVICE_NAME, 1, Length(SERVICE_NAME)-4);
  21. GMainLog.LogMsg('AfterConstruction: service name is "'+SERVICE_NAME+'"');
  22.  
  23. Name := SERVICE_NAME;
  24. DisplayName := SERVICE_NAME;
  25. end;


HotMan Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: HotMan (статус: Посетитель)
Вопрос отправлен: 28 апреля 2009, 17:30
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 28 апреля 2009, 18:28; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 28 апреля 2009, 18:10 [#1]:

Плохое решение. Но сама проблема думаю в том, что происходит борьба за ресурсы - например попытка открыть сервер на одном и том же порте.
К тому же с приведенного кода я не увидел, как изменяется имя от сервиса к сервису - у них всех будет одинаковое.
Зачем приводить код, который работает? мешающий код скорее всего сидит в OnCreate форм и объектов.
Галочка "подтверждения прочтения" - вселенское зло.
HotMan

HotMan (статус: Посетитель), 28 апреля 2009, 18:15 [#2]:

1)Имя сервиса назначается по имени файла, у каждого сервиса ведь свое имя.
2) Вряд ли проблема из-за борьбы за ресурсы, такая ситуация происходит и когда рассматриваемый сервис запускается в единственном экземпляре.
HotMan

HotMan (статус: Посетитель), 28 апреля 2009, 18:19 [#3]:

Хорошо. А какие более подходящие есть решения?:)
Вадим К

Вадим К (статус: Академик), 28 апреля 2009, 18:24 [#4]:

И плодяться exe файлы? о ужас. А о том, что можно задавать параметры при запуске не в курсе? так делает майкрософт с своим svchost, но они файлы не плодят.
Плодить таким образом сервисы... да памяти на них не напасёшся:) А вот по параметрам, можно.
я думаю, что где то ещё имя сервиса задается. Имена не совпадают - и вот все проблемы.
Галочка "подтверждения прочтения" - вселенское зло.
HotMan

HotMan (статус: Посетитель), 28 апреля 2009, 18:28 [#5]:

ок, спасибо.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:41
Выполнено за 0.03 сек.