• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Сервис + 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;
 
Попробуй сделать то же самое из обычной программы, не из сервиса.
 
А почему Вы вызывает Processequest только один раз а не в цикле ?

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

Понятно почему он у Вас сразу же выходит...
 
В обычном приложении работает.
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). Или не пустым но с какими то вычислениями. Тестил на записи текста в файл - все ок.
А вот с СОМ никак =(
 
Можно попробовать
 
Так а вылетает на чём конкретно ? На создании COM Объекта?
 
Обьект создается. А вылетает на строчке
Код:
RezultConnect := OdnaC.initialize(OdnaC.rmtrade,'/d'+BaseAdres+' /n '+UserName+' /p '+UserPwd,'NO_SPLASH_SHOW');
это коннект к базе.
В обычном приложении не вылетает.
 
Судя по всему проблема самого приложения сервера.. Вы под какми правами запускаете сервис ? Под локальными системным аккаунтом ? Попробуйте под своим...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab