Witam,
napisałem najprostszą usługę, która zapisuje aktualny czas do pliku tekstowego.
Kod się kompiluję, usługę zainstalowałem oraz włączyłem, ale nie tworzy się plik w określonej ścieżce oraz nie zapisują się dane.
Czy ktoś może powiedzieć co jest nie tak?
W właściwościach zmieniłem tylko Name oraz DisplayName.
unit MyServiceUnit;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs;
type
TWorkflowThread = class(TThread)
protected
procedure Execute; override;
end;
T_PDFCreate = class(TService)
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
procedure ServiceShutdown(Sender: TService);
private
{ Private declarations }
thread: TWorkflowThread;
procedure InsertInFile;
// procedure InsertInDatabase;
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
_PDFCreate: T_PDFCreate;
implementation
{$R *.dfm}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
_PDFCreate.Controller(CtrlCode);
end;
function T_PDFCreate.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure T_PDFCreate.InsertInFile;
const
FileName = 'C:\Log.txt';
var
F : TextFile;
begin
try
AssignFile(F, FileName);
try
if FileExists(FileName) then
Append(F)
else
Rewrite(F);
Writeln(F, DateTimeToStr(Now), ' ', DiskFree(0));
finally
CloseFile(F);
end;
except
end;
end;
procedure T_PDFCreate.ServiceStart(Sender: TService; var Started: Boolean);
begin
thread := TWorkflowThread.Create(False);
Started := True;
end;
procedure T_PDFCreate.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
ServiceShutdown(Sender);
Stopped := True;
end;
procedure T_PDFCreate.ServiceShutdown(Sender: TService);
begin
if Assigned(thread) then
begin
thread.Terminate;
while WaitForSingleObject(thread.Handle, WaitHint-100) = WAIT_TIMEOUT do
ReportStatus;
FreeAndNil(thread);
end;
end;
procedure TWorkflowThread.Execute;
begin
while not Terminated do
begin
_PDFCreate.InsertInFile;
TThread.Sleep(1000);
end;
end;
end.