Usługa nie tworzy pliku o określonej ścieżce – dlaczego?

0

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.

2

Nie analizowaniem kodu ale na szybko rzucił mi się w oczy zapis na dysk C. W nowszych windowsach może być zablokowany dostęp do folderu głównego, nie wiem tylko jak jest z usługami. Spróbuj zrobić zapis np. na pulpit albo inny dysk.

1 użytkowników online, w tym zalogowanych: 0, gości: 1