Сервис + Com

  • Автор темы Vacoola
  • Дата начала
Статус
Закрыто для дальнейших ответов.
V

Vacoola

Сегодня :: 22:18:11 Цитировать Изменить Удалить
Стоит задача создать сервис, который при старте запустит другое приложение через СОМ. И чтоб это приложение висело в памяти до остановки службы.
Дело в том, сервис прибивается виндой срвзу после запуска.
Вот тело OnExecute (может я делаю что то изза чего винда прибивает сервис?):

Код:

Код:
CoInitializeEx(NIl,COINIT_APARTMENTTHREADED);

While true do
begin
OdnaC := CreateOLEObject('V77S.Application');

BaseAdres := 'D:\!Balabasy\!Work\Prophoto\SQLBase';
UserName := 'worm';
UserPwd := 'infinity';
RezultConnect := OdnaC.initialize(OdnaC.rmtrade,'/d'+BaseAdres+' /n '+UserName+' /p '+UserPwd,'NO_SPLASH_SHOW');
Gdem:=OdnaC.EvalExpr('glOnline()');

Sleep(1000);
ServiceThread.ProcessRequests(True);
end;

CoUninitialize;
 
S

SNike

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

Barmutik

А почему Вы вызывает Processequest только один раз а не в цикле ?

Код:
		while not Terminated do
ServiceThread.ProcessRequests(True);

Понятно почему он у Вас сразу же выходит...
 
V

Vacoola

В обычном приложении работает.
Processequest в цикле:

Код:
CoInitializeEx(NIl,COINIT_APARTMENTTHREADED);

OdnaC := CreateOLEObject('V77S.Application');
BaseAdres := 'D:\!Balabasy\!Work\Prophoto\SQLBase';
UserName := 'worm';
UserPwd := 'infinity';
RezultConnect := OdnaC.initialize(OdnaC.rmtrade,'/d'+BaseAdres+' /n '+UserName+' /p '+UserPwd,'NO_SPLASH_SHOW');
Gdem:=OdnaC.EvalExpr('glOnline()');

While not terminated do
begin
ServiceThread.ProcessRequests(True);
end;

CoUninitialize;

Никаких изменений.
Соедует добавить что код работает в обычном приложении. И что сервис нормально выполняется если OnExecute оставить пустым (только с циклом в котором ServiceThread.ProcessRequests(True). Или не пустым но с какими то вычислениями. Тестил на записи текста в файл - все ок.
А вот с СОМ никак =(
 
S

SNike

Можно попробовать
 
B

Barmutik

Так а вылетает на чём конкретно ? На создании COM Объекта?
 
V

Vacoola

Обьект создается. А вылетает на строчке
Код:
RezultConnect := OdnaC.initialize(OdnaC.rmtrade,'/d'+BaseAdres+' /n '+UserName+' /p '+UserPwd,'NO_SPLASH_SHOW');
это коннект к базе.
В обычном приложении не вылетает.
 
B

Barmutik

Судя по всему проблема самого приложения сервера.. Вы под какми правами запускаете сервис ? Под локальными системным аккаунтом ? Попробуйте под своим...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!