恢汰锒_小妖 2015-12-15 02:20 采纳率: 50%
浏览 1771

window下用delphi写一个系统服务的问题

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;

  • 写回答

2条回答 默认 最新

  • 吉普赛的歌 2015-12-15 03:19
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 求计算赫斯特(Hurst)指数
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大