gpt4 book ai didi

delphi - 为什么我的 Delphi Service App 没有启动?

转载 作者:行者123 更新时间:2023-12-03 18:04:13 25 4
gpt4 key购买 nike

我使用向导创建了一个新的 Windows 服务 项目,放入一些代码,编译它,使用 /INSTALL 运行它,然后我尝试使用 启动它net start myservice 但出现找不到服务名称 错误;然后我转到服务中的控制面板,当我尝试开始单击“开始”链接时,显示的对话框窗口无限期地卡住在进度条的 50% 处。

这是我第一次尝试提供服务来更新我正在开发的主系统,为了测试,我放置了一个 Timer 来每隔一分钟报时。任何人都可以注意到哪里出了问题以及为什么会这样吗?

DPR 文件包含:

{...}
begin
if not Application.DelayInitialize or Application.Installing then
begin
Application.Initialize;
end;
Application.CreateForm(TZeusUpdateSevice, ZeusUpdateSevice);
Application.Run;
end.

PAS 文件包含:

{...}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
ZeusUpdateSevice.Controller(CtrlCode);
end;

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

procedure TZeusUpdateSevice.ServiceAfterInstall(Sender: TService);
var
regEdit : TRegistry;
begin
regEdit := TRegistry.Create(KEY_READ or KEY_WRITE);
try
regEdit.RootKey := HKEY_LOCAL_MACHINE;

if regEdit.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name,False) then
begin
regEdit.WriteString('Description','Mantém atualizados os arquivos e as credenciais da Plataforma Zeus.');
regEdit.CloseKey;
end;

finally
FreeAndNil(regEdit);
end;
end;

procedure TZeusUpdateSevice.ServiceStart(Sender: TService; var Started: Boolean);
begin
{ executa os processos solicitados pelo sistema }
Timer1.Enabled := True;
while not Terminated do ServiceThread.ProcessRequests(True);
Timer1.Enabled := False;
end;

procedure TZeusUpdateSevice.Timer1Timer(Sender: TObject);
begin
ShowMessage('Now, time is: ' + TimeToStr(Now));
end;

最佳答案

有几个明显的问题:

  1. 您在 OnStart 事件中有一个无限循环。此事件允许您在服务启动时执行一次性操作。该代码属于 OnExecute。
  2. 服务无法显示 UI,因此 ShowMessage 无法工作。您需要使用非视觉机制来提供反馈。

因为您的 OnStart 没有返回,所以 SCM 认为您的服务没有启动。所以我想上面的第 1 项是关于为什么您的服务无法启动的解释。

关于delphi - 为什么我的 Delphi Service App 没有启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17797565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com