Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: 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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.023 c
1-1098101217
Кабан
2004-10-18 16:06
2004.10.31
Команда xlat


14-1097258049
GanibalLector
2004-10-08 21:54
2004.10.31
ГИМН КАЗАНТИПА


14-1096638318
malkolinge
2004-10-01 17:45
2004.10.31
Delphi programmer needed


1-1097592546
White__
2004-10-12 18:49
2004.10.31
Excel


4-1096278232
DelphiLexx
2004-09-27 13:43
2004.10.31
Загруженность CPU