【发布时间】:2014-11-24 19:31:57
【问题描述】:
我有一个在 Delphi XE 中创建的服务,当 Windows 7 中的服务管理器提示时无法启动,我明白了
Error 1053: The service did not respond to the start or control reqquest in a timely fashion
我将服务与 AfterInstall 和 OnExecute 事件挂钩,这是我的事件代码:
procedure TAarhusRunner.ServiceAfterInstall(Sender: TService);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create(KEY_READ or KEY_WRITE);
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name, false) then
begin
Reg.WriteString('Description', 'Worker Service for Inversion Job Distribution');
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
procedure TAarhusRunner.ServiceExecute(Sender: TService);
begin
try
Self.Status := csRunning;
//start the loop
MainTimer.Interval := 5000; //MainTimer is declared in the .dfm
MainTimer.Enabled := True;
RecheckAndApplyTimer.Enabled := False;
while not Terminated do
begin
ServiceThread.ProcessRequests(true);
MainTimer.Enabled := False;
end;
except
on e: Exception do begin
MessageDlg(E.Message,mterror,[mbok],0);
exit;
end;
end;
end;
谁能告诉我我做错了什么?
【问题讨论】:
-
学习如何调试这类东西对你有好处。从一个全新的、空的、服务项目开始。是否开始,或者是否也失败并出现错误 1053。这是您应该尝试做的第一件事。
-
@TOndrej,你确定吗?那么,您将如何提出一个在循环中执行且有延迟的服务呢? (请不要说thread.sleep)
-
使用
WaitForSingleObject/WaitForMultipleObjects的循环会更好... -
我现在运行了一个空服务,仍然是错误 1053
-
那么你为什么要在这些代码上浪费我们的时间?!你应该问的是,为什么一个空白的服务项目无法启动。我建议你问这个问题。当你问这个问题时,我首先要问的是运行服务的用户帐户。