Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

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

 
Avgust   (2006-09-15 13:05) [0]

проблема с сервисом, при запуске компьютера должен лесть в реестр и прописывать нужные ключи... при инсталяции и деинсталяции сервиса всё нормально.. в реестр изменения вносятся.. но вот при старте компьютера нет, пробовал делать изменения на создание сервиса и на старт сервиса.. изменения не происходят.


 
Eraser ©   (2006-09-15 13:07) [1]

> [0] Avgust   (15.09.06 13:05)

в каком разделе реестра необходимо производить изменения при старте системы?


 
Avgust   (2006-09-15 13:08) [2]


> в каком разделе реестра необходимо производить изменения
> при старте системы?


HKEY_LOCAL_MACHINE

ключ: \SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\Domain Profile\GloballyOpenPorts\List

это брандмауэр


 
Сергей М. ©   (2006-09-15 13:41) [3]

у тебя ошибка в программе


 
Avgust   (2006-09-15 13:52) [4]


> у тебя ошибка в программе


хм... при установке сервисом или его удаления почемуто всё нормально срабатывает.. ну или просто клик по exe файлу.. неработает именно при установленном сервесе и загрузки компьютера.. :)


 
Сергей М. ©   (2006-09-15 13:57) [5]


> Avgust   (15.09.06 13:52) [4]


Давай-давай, продолжай рассуждать.
А воз и ныне там)


 
Avgust   (2006-09-15 14:28) [6]


> Давай-давай, продолжай рассуждать.


я не рассуждаю.. просто говорю что те задачи которые заложены выполняются.. но выполняются только при условии установки или удаления сервиса...

у меня поток запускается при создании сервиса.. так же пробовал его запускать при старте сервиса.. и по таймеру.. непашет блин (((((


 
Сергей М. ©   (2006-09-15 14:35) [7]


> непашет блин (((((
>


Угу. Так , наверно, и говорит, мол, не пашу блин)


 
Avgust   (2006-09-15 14:48) [8]


> Угу. Так , наверно, и говорит, мол, не пашу блин)


если ты про ошибки.. их нет... сам бы уже разобрался.. но нет ошибок.. логи чистые.


 
Сергей М. ©   (2006-09-15 14:50) [9]

Значит у тебя ошибка в программе)
В 17-й строке)


 
Avgust   (2006-09-28 05:41) [10]


> Значит у тебя ошибка в программе)


ну вот смотри:

var
reg:TRegistry;
begin
  reg:=TRegistry.Create;
  reg.RootKey:=HKEY_CURRENT_USER;
  reg.OpenKey("\SOFTWARE\test",true);
  reg.WriteInteger("test",1);
  Reg.CloseKey;

всё работает как надо.. но после установки сервисом перестаёт..


 
Ketmar ©   (2006-09-28 08:09) [11]

>[10] Avgust 28-Sep-2006, 05:41
кросавчег. тебя что спрашивали? куда писать? в HKEY_LOCAL_MACHINE. а ты куда пишешь?
>   reg.RootKey:=HKEY_CURRENT_USER;
с каких пор это одно и то же?


 
Avgust   (2006-09-28 10:45) [12]


> с каких пор это одно и то же?


не пишит  в HKEY_CURRENT_USER и в HKEY_LOCAL_MACHINE разрешение system на запись есть везде.. но не пишит и всё..


 
Avgust   (2006-09-28 13:14) [13]

хм.. а может это невозможно?..


 
Ketmar ©   (2006-09-28 13:18) [14]

>[13] Avgust 28-Sep-2006, 13:14
>хм.. а может это невозможно?..
однозначно. а остальные это делают при помощи некромантии.


 
Elen ©   (2006-09-28 13:22) [15]


> Avgust

А какой у тебя тип сервиса? и где вызывается этот код?


 
Ketmar ©   (2006-09-28 13:25) [16]

>[15] Elen(c) 28-Sep-2006, 13:22
>А какой у тебя тип сервиса? и где вызывается этот код?
т-с-с-с. это секрет. автор не скажет.


 
Elen ©   (2006-09-28 13:30) [17]


> Ketmar

По секрету всему свету. Ато Света сама нагрянет...


 
Avgust   (2006-09-28 13:59) [18]


> А какой у тебя тип сервиса? и где вызывается этот код?


stWin32

да везде пробовал и на создании и на запуске...

зы.. я понимаю что большенство сдесь кульных программёрав и никакда у них не вазникает проблем.. но плиз.. харе стебаца.. я просто админ и програмлю как любитель..


 
Ketmar ©   (2006-09-28 14:06) [19]

>[18] Avgust 28-Sep-2006, 13:59
>но плиз.. харе стебаца.. я просто админ
>и програмлю как любитель..
хватит плакать. тебе ж намекнули -- сократи код до минимума и покажи. тогда будем думать предметно.


 
Avgust   (2006-09-28 14:09) [20]


>  сократи код до минимума и покажи. тогда будем думать предметно.


в 10-ом посте этот код.. куда его ещё меньше делать?...


 
Ketmar ©   (2006-09-28 14:14) [21]

>[20] Avgust 28-Sep-2006, 14:09
> в 10-ом посте этот код.. куда его ещё меньше
>делать?...
это не код. это обломок. ты по колесу от "запорожца" сможешь неисправность двигателя диагностировать?


 
Avgust   (2006-09-28 14:20) [22]


> ты по колесу от "запорожца" сможешь неисправность двигателя
> диагностировать


ты прикалываешься?...
это весь код.. это полностью рабочий код.. больше нету ничего..

вставлял его на старт сервиса.. на его создание.. карочи на все события ставил.. но как только я устанавливаю этот сервис сервисом.. то всё.. запись в реестр непроисходит.


 
Ketmar ©   (2006-09-28 14:42) [23]

ну вот тебе пример. только что проверил -- работат "на ура".
{$APPTYPE GUI}
{$I-}
program stezt;

uses
 Windows, WinSvc, SysUtils, Registry;

var
 serviceName: PChar = "";
 status: TServiceStatus;
 statusHandle: SERVICE_STATUS_HANDLE;
 serviceTable: packed array [0..1] of TServiceTableEntry;
 stopped: Boolean;
 paused: Boolean;

procedure ServiceMain ();
var
 r: TRegistry;
begin
 repeat
   if not paused then
   begin
     r := nil;
     try
       r := TRegistry.Create();
       r.RootKey := HKEY_LOCAL_MACHINE;
       if r.OpenKey("software\av0", true) then
       begin
         r.WriteInteger("intvalue", Random(65536));
       end;
     except
     end;
     FreeAndNil(r);
     Sleep(1000);
   end;
 until stopped;
end;

procedure ServiceCtrlHandler(Control: dword); stdcall;
begin
 case Control of
   SERVICE_CONTROL_STOP:
     begin
       stopped := True;
       status.dwCurrentState := SERVICE_STOP_PENDING;
       SetServiceStatus(statusHandle, status);
     end;
   SERVICE_CONTROL_PAUSE:
     begin
       paused := True;
       status.dwcurrentstate := SERVICE_PAUSED;
       SetServiceStatus(statusHandle, status);
     end;
   SERVICE_CONTROL_CONTINUE:
     begin
       paused := False;
       status.dwCurrentState := SERVICE_RUNNING;
       SetServiceStatus(statusHandle, status);
     end;
   SERVICE_CONTROL_INTERROGATE: SetServiceStatus(statusHandle, status);
   SERVICE_CONTROL_SHUTDOWN: stopped := True;
 end;
end;

procedure ServiceCtrlDispatcher(dwArgc: dword; var lpszArgv: PChar); stdcall;
begin
 statusHandle := RegisterServiceCtrlHandler(serviceName, @ServiceCtrlHandler);
 if statusHandle <> 0 then
 begin
   ZeroMemory(@status, SizeOf(status));
   status.dwServiceType := SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS;
   status.dwCurrentState:= SERVICE_START_PENDING;
   status.dwControlsAccepted := SERVICE_ACCEPT_STOP or SERVICE_ACCEPT_PAUSE_CONTINUE;
   status.dwWaitHint := 1000;
   SetServiceStatus(statusHandle, status);
   stopped := False;
   paused := False;
   status.dwCurrentState := SERVICE_RUNNING;
   SetServiceStatus(statusHandle, status);
   ServiceMain;
   status.dwCurrentState := SERVICE_STOPPED;
   SetServiceStatus(statusHandle, status);
 end;
end;

procedure UninstallService(serviceName: PChar);
var
 SCManager: SC_HANDLE;
 Service: SC_HANDLE;
begin
 SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
 if SCManager = 0 then Exit;
 try
   Service := OpenService(SCManager, serviceName, SERVICE_ALL_ACCESS);
   ControlService(Service, SERVICE_CONTROL_STOP, status);
   DeleteService(Service);
   CloseServiceHandle(Service);
 finally
   CloseServiceHandle(SCManager);
 end;
end;

procedure InstallService(serviceName, DisplayName: PChar; fileName: string);
var
 SCManager: SC_HANDLE;
 Service: SC_HANDLE;
 Args: PChar;
begin
 SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
 if SCManager = 0 then Exit;
 try
   Service := CreateService(SCManager, serviceName, DisplayName,
     SERVICE_ALL_ACCESS,
     SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS,
     SERVICE_AUTO_START,
     SERVICE_ERROR_IGNORE,
     PChar(fileName), nil, nil, nil,
     nil, nil);
   if Service = 0 then
     //MessageBox(0, "error installing service", "xkit error", 0)
   else
   begin
     Args := nil;
     StartService(Service, 0, Args);
   end;
   CloseServiceHandle(Service);
 finally
   CloseServiceHandle(SCManager);
 end;
end;

begin
 serviceName := "tezzzt";
 if ParamStr(1) = "/i" then
 begin
   //MessageBox(0, "installing service", "xkit", 0);
   InstallService(serviceName, "tezzzt1", ParamStr(0));
 end
 else if ParamStr(1) = "/u" then
 begin
   //MessageBox(0, "uninstalling service", "xkit", 0);
   UninstallService(serviceName);
 end
 else
 begin
   serviceTable[0].lpServiceName := serviceName;
   serviceTable[0].lpServiceProc := @ServiceCtrlDispatcher;
   serviceTable[1].lpServiceName := nil;
   serviceTable[1].lpServiceProc := nil;
   StartServiceCtrlDispatcher(serviceTable[0]);
 end;
end.



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

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

Наверх




Память: 0.54 MB
Время: 0.065 c
2-1159520821
Term
2006-09-29 13:07
2006.10.15
Может туплю


2-1159158672
vodvorezlaya
2006-09-25 08:31
2006.10.15
SQL и TTable


11-1135150285
Lari
2005-12-21 10:31
2006.10.15
Перехват нажатия кнопки в заголовке программы


15-1158903145
Ega23
2006-09-22 09:32
2006.10.15
С Днём рождения! 22 сентября


2-1159423777
vodvorezlaya
2006-09-28 10:09
2006.10.15
Прочитал мануал и не могу понять что за оператор "as" и зачем он.