Mám vlastne jednoduchý zápis služby. Neivem ako to spustiť, prípadne, čo tomu ešte chýba. Tiež by ma zaujímalo, či opakované spúšťanie metódy Execute zabezpečí systém alebo si to musím zabezpečiť sám pomocou TTimer. Myslím, že s tým súvisí vlastnosť WaitHint.
unit uShutDown;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
IniFiles;
type
TShutdownLog = class(TService)
procedure ServiceCreate(Sender: TObject);
procedure ServiceDestroy(Sender: TObject);
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceExecute(Sender: TService);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceShutdown(Sender: TService);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
{ Private declarations }
LogFile: TInifile;
LogIndex: Integer;
procedure SaveTime;
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
ShutdownLog: TShutdownLog;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
ShutdownLog.Controller(CtrlCode);
end;
function TShutdownLog.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TShutdownLog.SaveTime;
begin
LogFile.WriteDateTime('Logs', 'Time' + IntToStr(LogIndex) + 'Off', Time);
end;
procedure TShutdownLog.ServiceCreate(Sender: TObject);
begin
LogFile := TIniFile.Create('Computer.log');
LogIndex := LogFile.ReadInteger('Main', 'Count' , 0);
Inc(LogIndex);
LogFile.WriteDateTime('Logs', 'Time' + IntToStr(LogIndex) + 'On', Time);
LogFile.WriteInteger('Main', 'Count', IntToStr(LogIndex));
SaveTime;
end;
procedure TShutdownLog.ServiceDestroy(Sender: TObject);
begin
SaveTime;
LogFile.Free;
end;
procedure TShutdownLog.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
SaveTime;
end;
procedure TShutdownLog.ServiceExecute(Sender: TService);
begin
SaveTime;
end;
procedure TShutdownLog.ServicePause(Sender: TService; var Paused: Boolean);
begin
SaveTime;
end;
procedure TShutdownLog.ServiceShutdown(Sender: TService);
begin
SaveTime;
end;
procedure TShutdownLog.ServiceStart(Sender: TService;
var Started: Boolean);
begin
SaveTime;
end;
procedure TShutdownLog.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
SaveTime;
end;
end.