Service

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Service

Сообщение aKirill » 09.10.2006 17:28:42

Можноли под лазарус или фрипаскалем написать NT сервис?
Если да то как есть примеры?
aKirill
незнакомец
 
Сообщения: 6
Зарегистрирован: 09.10.2006 17:26:51

Сообщение SovNarKom » 09.10.2006 18:43:01

Возможно, нужно просто задействовать нужное WinAPI... поищи на jedi
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение aKirill » 10.10.2006 05:29:43

я вот нашол пример:
http://community.freepascal.org:10000/b ... 092#152534

но сразу встрял на нехватки модулей
USES
Windows, NetPeruseUnit, TraceUnit;
aKirill
незнакомец
 
Сообщения: 6
Зарегистрирован: 09.10.2006 17:26:51

Сообщение byg » 30.03.2007 16:42:44

Доброго времени суток.
Мне также интересна возможность написания приложения работающего как служба Windows. И этот пример http://community.freepascal.org:10000/b ... 092#152534
был бы кстати, но NetPeruseUnit, TraceUnit я нигде не нашел. Может есть другие примеры или кто то может переделать аналогичные написанные на С.
byg
незнакомец
 
Сообщения: 3
Зарегистрирован: 30.03.2007 16:33:58
Откуда: Mozhaisk

Сообщение m_guest » 30.03.2007 18:32:53

По теме.
В Lazarus 0.9.22 среди прочего появилось:
Detailed list of changes:
....
LazDaemon: a package providing components and IDE items to easily
create windows services and linux daemons from Michael Van Canneyt
m_guest
постоялец
 
Сообщения: 193
Зарегистрирован: 14.08.2005 15:10:21

Сообщение byg » 02.04.2007 10:29:49

m_guest писал(а):По теме.
В Lazarus 0.9.22 среди прочего появилось:
Detailed list of changes:
....
LazDaemon: a package providing components and IDE items to easily
create windows services and linux daemons from Michael Van Canneyt


Спасибо за ответ и....
Хорошо, что это появилось, но я не смог найти :(
Может кто то сможет дать пример?
byg
незнакомец
 
Сообщения: 3
Зарегистрирован: 30.03.2007 16:33:58
Откуда: Mozhaisk

Сообщение shade » 02.04.2007 10:44:47

Вот пример как-то писал свою службу.
Он немного замудрен, но работает (по крайней мере работал)...
ftp://the1st.adygnet.ru/pub/examples/pascal/inetsrv.rar
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение byg » 02.04.2007 11:44:45

shade писал(а):Вот пример как-то писал свою службу.
Он немного замудрен, но работает (по крайней мере работал)...
ftp://the1st.adygnet.ru/pub/examples/pascal/inetsrv.rar


К сожалению ни FreePascal, ни Lasarus не знают WinSvc ;(

Буду дальше изучать АПИ и переделывать пример.
byg
незнакомец
 
Сообщения: 3
Зарегистрирован: 30.03.2007 16:33:58
Откуда: Mozhaisk

Сообщение shade » 02.04.2007 13:43:21

В FPC те же функции могут находиться с другом модуле, может даже в модуле windows...
В крайнем случае можно и самому написать.. там не так уж и много функций используется.. если не найдешь я тебе исходник сброшу (мыло в ЛС кидай) а дальше сам...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение shade » 02.04.2007 14:07:42

Выше приведенные ссылки:
http://community.freepascal.org:10000/b ... 092#152534
уже содержат все необходимые определения:
Код: Выделить всё
CONST
  SCMDLL = 'ADVAPI32.DLL';

TYPE
  SERVICE_STATUS_HANDLE  = Cardinal;
  LPSERVICE_MAIN_FUNCTION = PROCEDURE ( argc : Cardinal ; VAR argv : ppChar );
  LPHANDLER_FUNCTION      = PROCEDURE ( Opcode : Cardinal );
  LPSERVICE_TABLE_ENTRY  = ^SERVICE_TABLE_ENTRY;
  SERVICE_TABLE_ENTRY    = RECORD
                              lpServiceName : pChar;
                              lpServiceProc : LPSERVICE_MAIN_FUNCTION;
                            END;

CONST
  SERVICE_WIN32_OWN_PROCESS      = $00000010;
  //SERVICE_WIN32_SHARE_PROCESS    = $00000020;
  //SERVICE_WIN32                  = (SERVICE_WIN32_OWN_PROCESS OR SERVICE_WIN32_SHARE_PROCESS);
//
// Controls
//
  SERVICE_CONTROL_STOP          = $00000001;
  SERVICE_CONTROL_PAUSE          = $00000002;
  SERVICE_CONTROL_CONTINUE      = $00000003;
  SERVICE_CONTROL_INTERROGATE    = $00000004;
  SERVICE_CONTROL_SHUTDOWN      = $00000005;
//
// Service State -- for CurrentState
//
  SERVICE_STOPPED                = $00000001;
  SERVICE_START_PENDING          = $00000002;
  SERVICE_STOP_PENDING          = $00000003;
  SERVICE_RUNNING                = $00000004;
  //SERVICE_CONTINUE_PENDING      = $00000005;
  //SERVICE_PAUSE_PENDING          = $00000006;
  SERVICE_PAUSED                = $00000007;
//
// Controls Accepted  (Bit Mask)
//
  SERVICE_ACCEPT_STOP            = $00000001;
  SERVICE_ACCEPT_PAUSE_CONTINUE  = $00000002;
  SERVICE_ACCEPT_SHUTDOWN        = $00000004;

TYPE
  //LPSERVICE_STATUS        = ^SERVICE_STATUS;
  SERVICE_STATUS          = RECORD
                              dwServiceType            : Cardinal;
                              dwCurrentState            : Cardinal;
                              dwControlsAccepted        : Cardinal;
                              dwWin32ExitCode          : Cardinal;
                              dwServiceSpecificExitCode : Cardinal;
                              dwCheckPoint              : Cardinal;
                              dwWaitHint                : Cardinal;
                            END;

FUNCTION StartServiceCtrlDispatcher ( lpServiceStartTable : LPSERVICE_TABLE_ENTRY ) : Boolean ;
  stdcall ; external SCMDLL name 'StartServiceCtrlDispatcherA';

FUNCTION RegisterServiceCtrlHandler ( lpServiceName : pChar ; lpHandleProc : LPHANDLER_FUNCTION ) : SERVICE_STATUS_HANDLE ;
  stdcall ; external SCMDLL name 'RegisterServiceCtrlHandlerA';

FUNCTION SetServiceStatus ( hServiceStatus : SERVICE_STATUS_HANDLE ; VAR ServiceStatus : SERVICE_STATUS ) : Boolean ;
  stdcall ; external SCMDLL name 'SetServiceStatus';

Как видишь не так уж и много :wink:
Просто вынеси все это в модуль WinSvc

А NetPeruseUnit, TraceUnit наверное какие-то вспомогательные модули без которых можно обойтись......
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение aKirill » 02.04.2007 14:14:48

Долго искал ответ))))
Лучше позно чем некогда)))
aKirill
незнакомец
 
Сообщения: 6
Зарегистрирован: 09.10.2006 17:26:51

Сообщение m_guest » 02.04.2007 20:04:07

byg писал(а): но я не смог найти :(

Ищите пакет lazdaemon здесь:
"Компоненты"->"Настройка установленных пакетов", список "Доступные пакеты"..
Правда, он у меня не поставился... (
m_guest
постоялец
 
Сообщения: 193
Зарегистрирован: 14.08.2005 15:10:21


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 41

Рейтинг@Mail.ru