Ещё раз всем добрый день. И так, пишу свой сервис, но возник вопрос:| Код |
procedure ServiceProc(argc : DWORD;var argv : array of PChar);stdcall; var Status : DWORD; SpecificError : DWORD; begin ServiceStatus.dwServiceType := SERVICE_WIN32; 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); if ServiceStatusHandle = 0 then WriteLn('RegisterServiceCtrlHandler Error');
Status :=ServiceInitialization(argc,argv,SpecificError); if Status <> NO_ERROR then begin ServiceStatus.dwCurrentState := SERVICE_STOPPED; ServiceStatus.dwCheckPoint := 0; ServiceStatus.dwWaitHint := 0; ServiceStatus.dwWin32ExitCode:=Status; ServiceStatus.dwServiceSpecificExitCode:=SpecificError;
SetServiceStatus (ServiceStatusHandle, ServiceStatus); LogError('ServiceInitialization'); exit; end;
ServiceStatus.dwCurrentState :=SERVICE_RUNNING; ServiceStatus.dwCheckPoint :=0; ServiceStatus.dwWaitHint :=0;
if not SetServiceStatus (ServiceStatusHandle,ServiceStatus) then begin Status:=GetLastError; LogError('SetServiceStatus'); exit; end; // WORK HERE //ЗДЕСЬ БУДЕТ ОСНОВНОЙ КОД ПРОГРАММЫ repeat if ServiceStatus.dwCurrentState <> SERVICE_PAUSED then begin if CmpDate = 1 then ServiceStatus.dwCurrentState := SERVICE_STOPPED; if StrToTime(RunnesTime) = Time then WinExec(Pchar(GetFile('C:/Program Files/QIP','qip.exe')),SW_SHOWNORMAL);
end; until ServiceStatus.dwCurrentState = SERVICE_STOPPED; end;
|
После этих строк работа сервиса прекращается-(
| Код | repeat if ServiceStatus.dwCurrentState <> SERVICE_PAUSED then begin if CmpDate = 1 then ServiceStatus.dwCurrentState := SERVICE_STOPPED; if StrToTime(RunnesTime) = Time then WinExec(Pchar(GetFile('C:/Program Files/QIP','qip.exe')),SW_SHOWNORMAL);
end; until ServiceStatus.dwCurrentState = SERVICE_STOPPED;
|
Тоесть Repeat не просиходит. И вот как мне заставить его работать собственно, чтобы там раз в 10 секунд он выполнял свои действия? |