2014-09-30 3 views
0

나는 윈도우 7의 서비스 관리자에서 메시지가 표시 될 때, 나는 서비스가 매여있다델파이 XE 서비스가 시작되지 않습니다 : 오류 1053

Error 1053: The service did not respond to the start or control reqquest in a timely fashion 

을 얻을 시작되지 않습니다 델파이 XE에서 만든 서비스가 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; 

아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까?

+0

이런 종류의 디버깅 방법을 배우는 것이 좋습니다. 새롭고 비어있는 서비스 프로젝트로 시작하십시오. 이 작업이 시작 되나요? 아니면 1053 오류로도 실패합니다. 처음 시도해야하는 작업입니다. –

+0

@TOndrej, 이거 확실한가요? 그런 다음 지연된 루프에서 수행중인 서비스를 어떻게 제안 하시겠습니까? (Thread.sleep을 말하지 말아주세요) –

+0

'WaitForSingleObject' /'WaitForMultipleObjects'가있는 루프가 더 좋을 것입니다 ... – whosrdaddy

답변

4

당신은 True-WaitForMessage 세트로 서비스 루프에

ServiceThread.ProcessRequests(True); 

를 사용합니다. 서비스 메시지가 무기한 대기하기 때문에 루프가 차단됩니다.

ServiceThread.ProcessRequests(False); 

어떤 일반적인 조언 :

단지에 줄을 변경, 문제를 해결하기 위해 대신 OnStart 이벤트 핸들러의 스레드를 서비스의 OnExecute 처리기를 구현하지만, 산란하지 마십시오

. OnStop 이벤트 처리기에서이 스레드를 종료하십시오. 자세한 내용은 here을 참조하십시오.

(서비스 스레드와 같이) GUI가 아닌 스레드의 TTimer을 사용하는 것은 까다 롭습니다.하지만 불가능하지 않습니다 (David Heffernan은이 주제에 대한 주제가 here on SO입니다).

+0

귀하의 조언을 빌어, 같은 결과를 시도해보십시오. ( –

+0

@BjarkeMoholt 왜 내 조언을 무시합니까? 새로운 빈 서비스 프로젝트가 시작됩니까? –

+0

@David 아니, 같은 오류. 한 줄로 내 문제를 해결할 수 있다면 더 큰 규모의 테스트 절차를 거치기 전에 알아야했다. –

0

(해결 된) 서비스가 응답하지 못하게하는 것이 단위 오류 인 것으로 나타났습니다. 해당 .bpl 패키지를 서비스 폴더에 복사했는데 그 오류를 해결하는 것 같았습니다.

입력 해 주셔서 감사합니다.

+0

서비스 응용 프로그램에서 런타임 패키지를 사용하는 이유는 무엇입니까? – whosrdaddy

+0

패키지에 재사용하고 싶은 기능이 포함되어 있습니다. 그것은 첫 번째 서비스 였고 많은 시행 착오를 겪었습니다. 앞으로 왜 최선의 아이디어가 될지 모르겠으므로 패키지를 제거하고 서비스를 정리하십시오 –

+0

어쨌든, 제 대답은 여전히 맞습니다. 그렇게 명심하십시오.보시다시피, 질문 할 때 세부 사항이 중요합니다 ... – whosrdaddy

관련 문제