window下用delphi写一个系统服务,系统服务再生成一个form,求大神指点下这个为什么没生成窗口
这是service application的代码
unit Unit_Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,Unit3;
type
TServiceDemo = class(TService)
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceExecute(Sender: TService);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceShutdown(Sender: TService);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
ServiceDemo: TServiceDemo;
FrmMain: TForm1;
gbCanClose: Boolean;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
ServiceDemo.Controller(CtrlCode);
end;
function TServiceDemo.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TServiceDemo.ServiceContinue(Sender: TService;var Continued: Boolean);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;
procedure TServiceDemo.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;
procedure TServiceDemo.ServicePause(Sender: TService;var Paused: Boolean);
begin
Paused := True;
end;
procedure TServiceDemo.ServiceShutdown(Sender: TService);
begin
gbCanClose := true;
FrmMain.Free;
Status := csStopped;
ReportStatus();
end;
procedure TServiceDemo.ServiceStart(Sender: TService;var Started: Boolean);
begin
Started := True;
Svcmgr.Application.CreateForm(TForm1, FrmMain);
gbCanClose := False;
FrmMain.Hide;
end;
procedure TServiceDemo.ServiceStop(Sender: TService;var Stopped: Boolean);
begin
Stopped := True;
gbCanClose := True;
FrmMain.Free;
end;
end.
这是form1的
procedure TForm1.FormCreate(Sender: TObject);
begin
FormStyle := fsStayOnTop;
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
gbCanClose := False;
tmr2.Interval := 1000;
tmr2.Enabled := True;
end;