如果下面的代码没错,
我为什么在C:\'c:\ServiceLog.txt里看不到服务写的‘hello’?----------------------------------------------------------program SmallService;uses
  SvcMgr,
  Unit1 in 'Unit1.pas' {Service1: TService};{$R *.RES}begin
  Application.Initialize;
  Application.CreateForm(TService1, Service1);
  Application.Run;
end.--------------------------------------------------------
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;
type
  TSparkyThread = class(TThread)
    public
    procedure Execute; override;
  end;type
  TService1 = class(TService)
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceContinue(Sender: TService; var Continued: Boolean);
    procedure ServicePause(Sender: TService; var Paused: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
  private
    { Private declarations }
  public        function GetServiceController: TServiceController; override;
    { Public declarations }
 
  end;
var
  Service1: TService1;
implementation
{$R *.DFM}
var
  SparkyThread: TSparkyThread;
procedure TSparkyThread.Execute;
var
    f:TextFile;
begin    
  while not Terminated do
  begin
    AssignFile(f, 'c:\ServiceLog.txt');
    Append(f);
    Writeln(f,'Hello!');
    Flush(f);
    CloseFile(f);
    Sleep(100);
  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
  SparkyThread := TSparkyThread.Create(False);
  Started := True;
end;procedure TService1.ServiceContinue(Sender: TService;
  var Continued: Boolean);
begin
  SparkyThread.Resume;
  Continued := True;
end;procedure TService1.ServicePause(Sender: TService; var Paused: Boolean);
begin
  SparkyThread.Suspend;
  Paused := True;
end;procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  SparkyThread.Terminate;
  Stopped := True;
end;end.

解决方案 »

  1.   

    ServiceLog.txt是否已存在,如果不存在的话,要先创建
      

  2.   

    在你的Excute最后加上代码:
    FreeOnTerminate:= True;procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
    begin
      SparkyThread.Terminate;
      SparkyThread.Destroy;
      Stopped := True;
    end;
    应该就可以正常关系服务了...
    而且,你的代码Excute中没有写下去,就是写了,也可能就只有一个,应该用一个循环顺序读行,直到读到最后,在写你的'Holle!'....