Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Внизработа с 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c