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

Вниз

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

 
MakNik ©   (2003-10-06 11:26) [0]

Есть готовая программа... Подскажите, плз., как повесить ее как сервис, чтобы она запускалась автоматически под NT4, Win98, Xp???


 
Polevi ©   (2003-10-06 13:43) [1]

если GUI приложение - используй TServiceApplication
если консольная - могу пример дать


 
MakNik ©   (2003-10-07 12:54) [2]

По сути мне нужно создать сервис, который при перезагрузке комъютера будет запускать мою прогу. Буду очень благодарен если кто даст такой примерчик!


 
Warlock ©   (2003-10-07 13:35) [3]

Вот тебе код, основанный на TServiceApplication/
В реестре в ветке HKEY_LOCAL_MACHINE\Software\MyService
в параметре
PrgPath
сидит имя и путь запускаемой программы.
Правда работает этот сервис как-то странно..
Замечания к коду приветствуются

unit Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;

type
TMyRunnerService = class(TService)
procedure ServiceExecute(Sender: TService);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
PI: PROCESS_INFORMATION;
// Stream: TMemoryStream; // Add this line here
{ Private declarations }
ValAdress: PByte;
function RunProgram: Boolean;
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;

var
MyRunnerService: TMyRunnerService;

implementation

{$R *.DFM}

uses shellapi;

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
MyRunnerService.Controller(CtrlCode);
end;

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

function TMyRunnerService.RunProgram: Boolean;
var SI: STARTUPINFO;
Path: PChar;
begin
Result:=True;
Path:=PChar(ValAdress);
ZeroMemory(@SI,SizeOf(SI));
SI.cb:=SizeOf(SI);
if not CreateProcess(nil,Path,nil,nil,False,0,nil,nil,SI,PI) then
Result:=False;
end;

procedure TMyRunnerService.ServiceExecute(Sender: TService);
var ExCode: Cardinal;
begin
RunProgram;
while not Terminated do
begin
ServiceThread.ProcessRequests(True);
end;
if pi.hProcess<>0 then
if GetExitCodeProcess(pi.hProcess,ExCode) then
if TerminateProcess(pi.hProcess,ExCode) then
begin
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
end;
end;

procedure TMyRunnerService.ServiceStart(Sender: TService;
var Started: Boolean);
var Res: HKEY;
Err: Integer;
ValType,PathSz: DWord;
begin
Err:=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\MyService",0,KEY_QUERY_VALUE,Res);
if Err<>ERROR_SUCCESS then
begin
Started:=False;
Exit;
end;
PathSz:=MAX_PATH;
ValType:=REG_SZ;
New(ValAdress);
Err:=RegQueryValueEx(Res,"PrgPath",nil,@ValType,ValAdress,@PathSz);
RegCloseKey(Res);
if Err<>ERROR_SUCCESS then
begin
Started:=False;
Dispose(ValAdress);
Exit;
end;
end;

procedure TMyRunnerService.ServiceStop(Sender: TService;
var Stopped: Boolean);
begin
Dispose(ValAdress);
Stopped:=True;
end;


 
MakNik ©   (2003-10-07 15:04) [4]

А как это все дело корректно установить?



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

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

Наверх




Память: 0.47 MB
Время: 0.016 c
3-65370
Dark Elf
2003-09-25 16:10
2003.10.20
Пароль и логин в TADOConnection


11-65400
-= ALEX =-
2003-01-21 16:46
2003.10.20
Перетаскивание окон


1-65512
Viktor Kushnir
2003-10-07 19:27
2003.10.20
Hot Keys


6-65563
_kostya_
2003-08-25 14:38
2003.10.20
Как создать письмо с вложенным файлом и сохранить его на диск.


1-65487
Abikos
2003-10-08 17:15
2003.10.20
Application.OnException