Service
Модератор: Модераторы
Service
Можноли под лазарус или фрипаскалем написать NT сервис?
Если да то как есть примеры?
Если да то как есть примеры?
я вот нашол пример:
http://community.freepascal.org:10000/b ... 092#152534
но сразу встрял на нехватки модулей
USES
Windows, NetPeruseUnit, TraceUnit;
http://community.freepascal.org:10000/b ... 092#152534
но сразу встрял на нехватки модулей
USES
Windows, NetPeruseUnit, TraceUnit;
Доброго времени суток.
Мне также интересна возможность написания приложения работающего как служба Windows. И этот пример http://community.freepascal.org:10000/b ... 092#152534
был бы кстати, но NetPeruseUnit, TraceUnit я нигде не нашел. Может есть другие примеры или кто то может переделать аналогичные написанные на С.
Мне также интересна возможность написания приложения работающего как служба Windows. И этот пример http://community.freepascal.org:10000/b ... 092#152534
был бы кстати, но NetPeruseUnit, TraceUnit я нигде не нашел. Может есть другие примеры или кто то может переделать аналогичные написанные на С.
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
Спасибо за ответ и....
Хорошо, что это появилось, но я не смог найти
Может кто то сможет дать пример?
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Вот пример как-то писал свою службу.
Он немного замудрен, но работает (по крайней мере работал)...
ftp://the1st.adygnet.ru/pub/examples/pascal/inetsrv.rar
Он немного замудрен, но работает (по крайней мере работал)...
ftp://the1st.adygnet.ru/pub/examples/pascal/inetsrv.rar
shade писал(а):Вот пример как-то писал свою службу.
Он немного замудрен, но работает (по крайней мере работал)...
ftp://the1st.adygnet.ru/pub/examples/pascal/inetsrv.rar
К сожалению ни FreePascal, ни Lasarus не знают WinSvc ;(
Буду дальше изучать АПИ и переделывать пример.
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Выше приведенные ссылки:
http://community.freepascal.org:10000/b ... 092#152534
уже содержат все необходимые определения:
Как видишь не так уж и много
Просто вынеси все это в модуль WinSvc
А NetPeruseUnit, TraceUnit наверное какие-то вспомогательные модули без которых можно обойтись......
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';Как видишь не так уж и много
Просто вынеси все это в модуль WinSvc
А NetPeruseUnit, TraceUnit наверное какие-то вспомогательные модули без которых можно обойтись......
