做服务程序遇到的问题.为什么启动一下之后,什么也没有呢?
我新建一个服务程序后.
项目主程序的代码如下:
begin
Application.Initialize;
Application.CreateForm(TService1, Service1);
Application.Run;
end.
而服务类的代码如下:
TService1 = class(TService)
...
end;
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;
function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TService1.ServiceExecute(Sender: TService);
begin
Stream := TMemoryStream.Create;
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;
线程类的代码如下:
TSparkyThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
procedure TSparkyThread.Execute;
begin
while not Terminated do
begin
Beep;
Sleep(500);
end;
end;
我基本上100%抄DELPHI帮助上的例子了.上面的代码,很可能在运行服务程序时会先调用TService1.ServiceStart.但是很奇怪,一运行这个程序,在每段都加上了断点,但发现上面的代码一句也没有执行.....程序只是运行了一下,马上就停止了.为什么会这样呢?错在哪?
[解决办法]
service程序要安装才能执行吧。
[解决办法]
安装: project1 /install
另外,貌似执行体程序应该写在ServiceExecute中。
[解决办法]
得先调用WINEXEC API 来执行注册命令 没有注册服务是不可能执行你的代码
还需要把服务手动启动
注册命名索性告诉你好了
WinExec( 'net stall '+注册的服务名,0)