Вниз
Скачать: CL | DM;

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

 
shelest   (2004-09-23 17:21) [0]

Если кто работал с компонентой TService, скажите почему она не позволяет производить изменения в системе(запись в реестре, запуск файла и тд.).
Вот код:
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
 SPECTR_Update.Controller(CtrlCode);
end;

function TSPECTR_Update.GetServiceController: TServiceController;
begin
 Result := ServiceController;
end;

procedure TSPECTR_Update.ServiceExecute(Sender: TService);
begin
while not Terminated do begin
 ServiceThread.ProcessRequests(True);
end;

end;

procedure TSPECTR_Update.ServiceStart(Sender: TService;
 var Started: Boolean);
begin
Timer1.Enabled:=True;
end;

procedure TSPECTR_Update.ServiceStop(Sender: TService;
 var Stopped: Boolean);
begin
 Timer1.Enabled:=False;
end;

procedure TSPECTR_Update.Timer1Timer(Sender: TObject);
var
local_ver, distr_ver:cardinal;
si:STARTUPINFO;
pi:PROCESS_INFORMATION;

begin
 local_ver:=GetFileVersion("C:\RAY\bin\VDClientKernel.dll");
 distr_ver:=GetFileVersion("\\spectr\newspectr$\bin\VDClientKernel.dll");
 ZeroMemory(@si,sizeof(si));
 si.cb:=SizeOf(si);
 CreateProcess( nil, // No module name (use command line).
 "C:\WINDOWS\regedit.exe",// Command line.
 nil,             // Process handle not inheritable.
 nil,             // Thread handle not inheritable.
 False,           // Set handle inheritance to FALSE.
 0,               // No creation flags.
 nil,             // Use parent"s environment block.
 nil,             // Use parent"s starting directory.
 si,              // Pointer to STARTUPINFO structure.
 pi );             // Pointer to PROCESS_INFORMATION structure.

beep;
end;

Может я что неправильно делаю?


 
Digitman ©   (2004-09-23 17:48) [1]

1. Очисть обработчик ServiceStart() - бестолково совершенно
2. Что за блажь - по тику таймера стартовать аж целый процесс regedit, в то время как модификация реестра - примитивнейший алгоритм с непоср.использованием соотв.WinAPI-функций ?


 
shelest   (2004-09-24 09:00) [2]

To Digitman ©

Это просто проверка.
Я могбы там и ноутпад загрузить.
Просто хотел узнать запустится приложение или нет.
Так вот оно не запустилось.

P. S. А про TRegistry я знаю :)


 
Digitman ©   (2004-09-24 10:17) [3]


> shelest


ты в курсе, что CreateProcess - функция ? почему не анализируешь рез-т ее выполнения ? хотя бы в целях отладки ?

таймер у тебя как создается ? ты просто бросил TTimer на модуль данных сервиса ? если так, то обработчик TSPECTR_Update.Timer1Timer должен вызываться в осн.трэде процесса сервиса, в то время как обращение к его св-ву Enabled происходит в доп.трэде ServiceThread, и это неверно, потому что трэды эти никак не синхронизированы - сервис в ответ на стоп-контроллер установит Timer.Enabled := False и тут же завершается, в то время как в этот момент обработчик события OnTimer может еще выполняться


 
Erik1 ©   (2004-09-24 16:46) [4]

Ну и изврат, я бы так недогодался. :)
А почему бы тебе в ServiceExecute всю работу невполнить? К томуже либо ты используеш ServiceExecute либо работаеш на событиях ServiceStart ServiceStop.
 Я запускал свой тред в ServiceStart и там работал, в этом подходе есть большой плюс. Очень удобно отлаживать в отдельном проекте.


 
t'Ice   (2004-09-28 15:37) [5]

ServiceThread.ProcessRequests(False);
так будет правильно.


 
Digitman ©   (2004-09-28 16:26) [6]


> t"Ice   (28.09.04 15:37) [5]
> ServiceThread.ProcessRequests(False);
> так будет правильно.


глупости



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.04 c
14-1097499560
Xmen
2004-10-11 16:59
2004.10.31
Unistall Delphi


3-1096910507
normandia
2004-10-04 21:21
2004.10.31
получить в delphi набор строк от встроенной процедуры interbase


3-1096445386
Term
2004-09-29 12:09
2004.10.31
Поддержка ссылочной целосности


14-1097204040
КаПиБаРа
2004-10-08 06:54
2004.10.31
Где хранить инфу о версии (формате) базы


14-1097698629
Marser
2004-10-14 00:17
2004.10.31
Андорра-Македония 1:0




   Наверх