|
Вопрос # 2 696/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Подскажите в чем может быть проблема:
Есть сервис, есть необходимость на одной машине запустить несколько копий таких сервисов (на разные БД). Для этого пытаюсь сделать динамичекое назначение имени сервиса при выполнении /install.
Для этого сделал вот такой код (см. приложение).
При установке приложения и его удалении - все нормально, имя сервиса регистрируется нормально, удаляется сервис тоже нормально.
НО: после добавления такого кода, запуск сервиса происходит очень долго, в результате выдает ошибку, о том что сервис запустить не удалось. Однако процесс в диспетчере задач сидит.
Без приведенного кода сервис работает нормально.
Приложение: Переключить в обычный режим- procedure TsmsMailSvc.ServiceBeforeInstall(Sender: TService);
- var
- SERVICE_NAME: String;
- begin
-
- SERVICE_NAME := Trim(ExtractFileName(ParamStr(0)));
- SERVICE_NAME := Copy(SERVICE_NAME, 1, Length(SERVICE_NAME)-4);
- GMainLog.LogMsg('AfterConstruction: service name is "'+SERVICE_NAME+'"');
-
- Name := SERVICE_NAME;
- DisplayName := SERVICE_NAME;
- end;
-
- procedure TsmsMailSvc.ServiceBeforeUninstall(Sender: TService);
- var
- SERVICE_NAME: String;
- begin
-
- SERVICE_NAME := Trim(ExtractFileName(ParamStr(0)));
- SERVICE_NAME := Copy(SERVICE_NAME, 1, Length(SERVICE_NAME)-4);
- GMainLog.LogMsg('AfterConstruction: service name is "'+SERVICE_NAME+'"');
-
- Name := SERVICE_NAME;
- DisplayName := SERVICE_NAME;
- end;
 |
Вопрос задал: HotMan (статус: Посетитель)
Вопрос отправлен: 28 апреля 2009, 17:30
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 28 апреля 2009, 18:28; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 28 апреля 2009, 18:10 [#1]:
Плохое решение. Но сама проблема думаю в том, что происходит борьба за ресурсы - например попытка открыть сервер на одном и том же порте.
К тому же с приведенного кода я не увидел, как изменяется имя от сервиса к сервису - у них всех будет одинаковое.
Зачем приводить код, который работает? мешающий код скорее всего сидит в OnCreate форм и объектов.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
HotMan (статус: Посетитель), 28 апреля 2009, 18:15 [#2]:
1)Имя сервиса назначается по имени файла, у каждого сервиса ведь свое имя.
2) Вряд ли проблема из-за борьбы за ресурсы, такая ситуация происходит и когда рассматриваемый сервис запускается в единственном экземпляре.
|
|
HotMan (статус: Посетитель), 28 апреля 2009, 18:19 [#3]:
Хорошо. А какие более подходящие есть решения?
|
|
Вадим К (статус: Академик), 28 апреля 2009, 18:24 [#4]:
И плодяться exe файлы? о ужас. А о том, что можно задавать параметры при запуске не в курсе? так делает майкрософт с своим svchost, но они файлы не плодят.
Плодить таким образом сервисы... да памяти на них не напасёшся А вот по параметрам, можно.
я думаю, что где то ещё имя сервиса задается. Имена не совпадают - и вот все проблемы.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
HotMan (статус: Посетитель), 28 апреля 2009, 18:28 [#5]:
ок, спасибо.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|