Сервис + Com

Тема в разделе "Delphi - СОМ", создана пользователем Vacoola, 24 янв 2007.

Статус темы:
Закрыта.
  1. Vacoola

    Vacoola Гость

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

    Код:

    Код (Text):
    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;
     
  2. SNike

    SNike Гость

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

    Barmutik Гость

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

    Код (Text):
            while not Terminated do
    ServiceThread.ProcessRequests(True);
    Понятно почему он у Вас сразу же выходит...
     
  4. Vacoola

    Vacoola Гость

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

    Код (Text):
    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). Или не пустым но с какими то вычислениями. Тестил на записи текста в файл - все ок.
    А вот с СОМ никак =(
     
  5. SNike

    SNike Гость

  6. Barmutik

    Barmutik Гость

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

    Vacoola Гость

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

    Barmutik Гость

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

Поделиться этой страницей