Текущий архив: 2007.01.21;
Скачать: CL | DM;
Вниз
Отправить сообщения в службу Найти похожие ветки
← →
Ling © (2006-09-12 18:36) [0]Пытаюсь написать службу.
В эту службу необходимо отправлять сообщения.
Подскажите, как мне это сделать :)
Вот моя неуклюжая попытка:
Служба:
unit ServiceUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,JobClasses,
xmldom, XMLIntf, msxmldom, XMLDoc,SyncObjs,ComObj,Activex;
type
TMainThread=class(TThread)
private
FEvent:TEvent;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean);
destructor destroy;override;
end;
TService1 = class(TService)
XMLDocument1: TXMLDocument;
procedure InitPathExe;
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
procedure ServiceCreate(Sender: TObject);
procedure ServiceDestroy(Sender: TObject);
private
FMainThread:TMainThread;
Storage:TspData;
FPathexe:string;
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
Service1: TService1;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;
function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TService1.InitPathExe;
var
Buffer: array[0..MAX_PATH] of Char;
begin
FillChar(buffer, sizeof(buffer), #0);
GetModuleFileName(HInstance, buffer, MAX_PATH);
FPathExe := string(buffer);
end;
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
FMainThread.Resume;
end;
procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
FMainThread.Terminate;
end;
{ TMainTread }
constructor TMainThread.Create(CreateSuspended: Boolean);
begin
inherited;
FEvent := TEvent.Create(nil, False,false, "Global\JMService_EventLoad");
end;
destructor TMainThread.destroy;
begin
FEvent.free;
inherited;
end;
procedure TMainThread.Execute;
var
SL:TStringList;
wr:TWaitResult;
begin
SL:=tStringList.Create;
try
while not terminated do
begin
wr:= FEvent.WaitFor(1000);
case wr of
wrSignaled:SL.Add(TimeToStr(now)+"::wrSignaled");
wrTimeout:SL.Add(TimeToStr(now)+"::wrTimeout");
wrAbandoned:SL.Add(TimeToStr(now)+"::wrAbandoned");
wrError:SL.Add(TimeToStr(now)+"::wrError");
end;
SL.SaveToFile("d:\sp\log.txt");
end;
finally
end;
end;
procedure TService1.ServiceCreate(Sender: TObject);
begin
FMainThread:=TMainThread.Create(true);
end;
procedure TService1.ServiceDestroy(Sender: TObject);
begin
FMainThread.Terminate;
FMainThread.Free;
end;
end.
из длругого приложения я делаю следующее::
procedure TForm1.FormCreate(Sender: TObject);
begin
...
FEvent := TEvent.Create(nil, False,false, "Global\JMService_EventLoad");
end;
procedure TForm1.ff1Click(Sender: TObject);
begin
FEvent.SetEvent;
end;
← →
Fay © (2006-09-12 22:28) [1]А где тут сообщения?
← →
Сергей М. © (2006-09-13 10:08) [2]
> FEvent := TEvent.Create(nil, False,false, "Global\JMService_EventLoad");
А вот цитата из справки:
Name can be a string of up to 260 characters, not including the backslash character (\).
??
Страницы: 1 вся ветка
Текущий архив: 2007.01.21;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.039 c