Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.03;
Скачать: CL | DM;

Вниз

Сервис   Найти похожие ветки 

 
UNLoader   (2003-01-13 17:25) [0]

Привет всем!
Решил на днях поразбираться с сервисами - залез на delphi.xonix.ru, там был пример. По нему я и написАл следующий код


program UNLoader;

uses Windows, WinSVC;

{$R *.RES}

var DispatchTable : array [0..1] of _SERVICE_TABLE_ENTRYA;
ServiceName: PChar;
ServiceStatus : SERVICE_STATUS;
ServiceStatusHandle : SERVICE_STATUS_HANDLE;

procedure ServiceCtrlHandler(Opcode : Cardinal);stdcall;
var
Status : Cardinal;
begin
case Opcode of
SERVICE_CONTROL_PAUSE :
begin
ServiceStatus.dwCurrentState := SERVICE_PAUSED;
end;
SERVICE_CONTROL_CONTINUE :
begin
ServiceStatus.dwCurrentState := SERVICE_RUNNING;
end;
SERVICE_CONTROL_STOP :
begin
ServiceStatus.dwWin32ExitCode:=0;
ServiceStatus.dwCurrentState := SERVICE_STOPPED;
ServiceStatus.dwCheckPoint :=0;
ServiceStatus.dwWaitHint :=0;

if not SetServiceStatus (ServiceStatusHandle,ServiceStatus)
then begin
Status:=GetLastError;
Exit;
end;
exit;
end;

SERVICE_CONTROL_INTERROGATE : ;
end;

if not SetServiceStatus (ServiceStatusHandle, ServiceStatus)
then begin
Status := GetLastError;
Exit;
end;
end;

procedure ServiceProc();stdcall;
var
Status : DWORD;
SpecificError : DWORD;
begin
ServiceStatus.dwServiceType := SERVICE_WIN32 or SERVICE_INTERACTIVE_PROCESS;
ServiceStatus.dwCurrentState := SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted := SERVICE_ACCEPT_STOP
or SERVICE_ACCEPT_PAUSE_CONTINUE;
ServiceStatus.dwWin32ExitCode := 0;
ServiceStatus.dwServiceSpecificExitCode := 0;
ServiceStatus.dwCheckPoint := 0;
ServiceStatus.dwWaitHint := 0;

ServiceStatusHandle :=
RegisterServiceCtrlHandler(ServiceName,@ServiceCtrlHandler);


ServiceStatus.dwCurrentState :=SERVICE_RUNNING;
ServiceStatus.dwCheckPoint :=0;
ServiceStatus.dwWaitHint :=0;

if not SetServiceStatus (ServiceStatusHandle,ServiceStatus)
then begin
Status:=GetLastError;
exit;
end;

// WORK HERE




end;

begin
ServiceName:= "UNLoader Service";

DispatchTable[0].lpServiceName:=ServiceName;
DispatchTable[0].lpServiceProc:=@ServiceProc;

DispatchTable[1].lpServiceName:=nil;
DispatchTable[1].lpServiceProc:=nil;

StartServiceCtrlDispatcher(DispatchTable[0]);

end.


как этот сервис взаимодействует с менеджером сервисов - понятно. Непонятно, как ему взаимодействовать например с командной строкой ?


 
Игорь Шевченко ©   (2003-01-13 17:37) [1]

Как обычно, GetCommandLine при запуске...


 
UNLoader   (2003-01-13 18:43) [2]

мне необходимо запускать процессы из под любого пользователя в нт. Но, как я понял, такие привилегии есть только у системы, из-под которой и запускается сервис. Допустим, я установил и запустил сервис, он уже висит у меня в списке процессов. КАК теперь, взаимодействуя с УЖЕ ЗАПУЩЕННЫМ процессом ч-з ком. строку, сделать к-л. действие?


 
ZZ ©   (2003-01-14 02:36) [3]

Посмотри в хелпе/MSDN про Named Pipes (CreateNamedPipe и т.д.)


 
UNLoader   (2003-01-14 14:22) [4]

а примерчик можно? а то сам боюсь не разберусь...


 
ZZ ©   (2003-01-15 03:57) [5]

Ты лучше попробуй разобраться,а если будут проблемы - пиши сюда :)


 
ddenisv   (2003-01-16 15:01) [6]

Удалено модератором
Примечание: У нас не ограничивают, задать свой сообственный вопрос



Страницы: 1 вся ветка

Текущий архив: 2003.03.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
3-5411
T{}r(l-l
2003-02-11 16:15
2003.03.03
Grid с Editom с поиском(типа Locate)


1-5481
lightix
2003-02-20 15:22
2003.03.03
Как в C++ Builder переконвертить текст в DOS CP866?


14-5859
Толян
2003-02-14 11:42
2003.03.03
Cristal Reports, где можно скачать?


1-5551
Lex
2003-02-20 15:00
2003.03.03
Ребята, помогите пожалуйста решить задачу на паскале! Очень надо!


14-5851
Brbr
2003-02-13 13:43
2003.03.03
Что такое модератор