我使用向导创建了一个新的Windows Service
项目,推出了一些代码,编译了它,用/INSTALL
运行它然后我尝试使用net start myservice
启动它但是我有一个service name not found
错误;然后我进入了服务中的控制面板,当我尝试开始单击“开始”链接时,对话框窗口会无限期地显示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;
答案 0 :(得分:12)
有几个明显的问题:
由于您的OnStart未返回,因此SCM将您的服务视为尚未启动。所以我猜上面的第1项是关于为什么你的服务无法启动的解释。