✅ CÓDIGO MODIFICADO: Unit1.pas
Código Delphi
[-]
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.SvcMgr;
type
TService1 = class(TService)
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
FWorkerThread: TThread;
procedure WriteLog(const cMsg: String);
public
function GetServiceController: TServiceController; override;
end;
var
Service1: TService1;
implementation
{$R *.dfm}
type
TWorkerThread = class(TThread)
protected
procedure Execute; override;
end;
procedure TWorkerThread.Execute;
begin
while not Terminated do
begin
TService1(Service1).WriteLog('Thread tick...');
Sleep(1000); end;
end;
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;
function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
WriteLog('ServiceStart');
FWorkerThread := TWorkerThread.Create(False); Started := True;
end;
procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
WriteLog('ServiceStop');
if Assigned(FWorkerThread) then
begin
FWorkerThread.Terminate;
FWorkerThread.WaitFor;
FreeAndNil(FWorkerThread);
end;
Stopped := True;
end;
procedure TService1.WriteLog(const cMsg: String);
var
myFile: TextFile;
cFile: string;
begin
try
cFile := 'C:\ServiceLogs\Service_Test.txt';
ForceDirectories(ExtractFilePath(cFile));
AssignFile(myFile, cFile);
if FileExists(cFile) then
Append(myFile)
else
ReWrite(myFile);
WriteLn(myFile, FormatDateTime('yyyy-mm-dd hh:nn:ss', Now) + ' ' + cMsg);
finally
CloseFile(myFile);
end;
end;
end.
✅ PASOS EXTRAS
Crea la carpeta C:\ServiceLogs manualmente, o dale permisos para que el servicio pueda crearla.
Instala el servicio:
Código:
MyService.exe /INSTALL
Arráncalo desde Servicios de Windows (services.msc).
Mira el archivo de log en C:\ServiceLogs\Service_Test.txt.