Главная страница
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.016 c
1-5502
UDS
2003-02-20 20:20
2003.03.03
Вопрос по компоненту


7-5876
Lipetsk
2003-01-03 19:41
2003.03.03
Как определить имеющееся железо ?


6-5678
Leviathan
2002-11-25 21:50
2003.03.03
TWebBrowser


6-5680
M_a_x
2003-01-12 00:52
2003.03.03
Помогите плиз.


14-5817
V-Isa
2003-02-12 15:46
2003.03.03
Просмотр каталогов и файлов.