delphi 注册系统服务启动时出错!

jzzm 2009-12-09 10:18:37
怎么解决把一个正常的EXE程序注册成系统服务后能正常启动,我现在注册成功后启动出现1053错误。有没有什么好办法,我需要程序中出现窗体,对话框等。
...全文
254 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzzm 2009-12-10
  • 打赏
  • 举报
回复
日志空的,里面并没有记录!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, Unit2;

type
TSysLock = class(TService)
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceShutdown(Sender: TService);
procedure ServiceExecute(Sender: TService);
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceCreate(Sender: TObject);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;

var
SysLock: TSysLock;
Frmlock: TFrmLock;
implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
SysLock.Controller(CtrlCode);
end;

function TSysLock.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

procedure TSysLock.ServiceStart(Sender: TService; var Started: Boolean);
begin
Started := True;
SvcMgr.Application.CreateForm(TFrmLock,FrmLock);
//Frmlock.Hide;
end;

procedure TSysLock.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Stopped := True;
FrmLock.Free;
end;

procedure TSysLock.ServicePause(Sender: TService; var Paused: Boolean);
begin
Paused := True;
end;

procedure TSysLock.ServiceShutdown(Sender: TService);
begin
FrmLock.Free;
Status := csStopped;
ReportStatus();
end;

procedure TSysLock.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;

end;

procedure TSysLock.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;

procedure TSysLock.ServiceCreate(Sender: TObject);
begin

end;

end.


lengfengxiaodao 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jzzm 的回复:]
那有没有好的办法解决一下?

[/Quote]
你该用日志输出,看是调用到哪行代码出错了
jzzm 2009-12-10
  • 打赏
  • 举报
回复
那有没有好的办法解决一下?
lengfengxiaodao 2009-12-10
  • 打赏
  • 举报
回复
你要明白 EXE相对的桌面和 SYETEM 服务相对的桌面不是同一个
另外服务跟操作系统也有很大关系的
jzzm 2009-12-10
  • 打赏
  • 举报
回复
我创建了一个标准的SERVICE程序,但是我如何让它交互,因为我需要程序里含有窗体信息,但是在服务启动后,窗体显示不出来!interactive已设置成TRUE
gyk120 2009-12-09
  • 打赏
  • 举报
回复
你不能创建Application,而是用Service
无条件为你 2009-12-09
  • 打赏
  • 举报
回复
前提是你的EXE要是一个服务工程。而不是普通的exe软件。
tjg5202 2009-12-09
  • 打赏
  • 举报
回复
学习。。。
cnzdgs 2009-12-09
  • 打赏
  • 举报
回复
服务程序初始化时要调用StartServiceCtrlDispatcher,告诉系统该程序的每个服务名称及ServiceMain入口地址,在ServiceMain中调用ResisterServiceCtrlHandlerEx注册回调函数,回调函数中响应各种事件。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧