Hi,
ah, eine Veränderung.
Nachdem ich nun das Erstellen des
COM-Objekts in das
OnStart verlagert habe und
CoInitializeEx mit
COINIT_MULTITHREADED verwende, startet der Dienst zumindest:
Delphi-Quellcode:
procedure TInfoTunesService.ServiceCreate(Sender: TObject);
begin
CoInitializeEx(nil, COINIT_MULTITHREADED);
end;
procedure TInfoTunesService.ServiceDestroy(Sender: TObject);
begin
CoUninitialize;
end;
procedure TInfoTunesService.ServiceStart(Sender: TService;
var Started: Boolean);
begin
FTunesInstance := CoiTunesApp.Create;
FTCPServer := TTCPDaemon.Create;
FTCPServer.FTunesInstance := FTunesInstance;
Started := true;
end;
Jedoch bekomme ich jetzt folgende Nachricht von Windows beim Starten des Dienstes:
Zitat:
---------------------------
Dienste
---------------------------
Dienst "InfoTunes-Service" wurde auf "Lokaler Computer" gestartet und dann angehalten. Einige Dienste werden automatisch angehalten, wenn sie sich im Leerlauf befindet, wie z. B. Leistungsprotokoll- und Alarmdienste.
---------------------------
OK
---------------------------
Im
OnExecute steht aber:
Delphi-Quellcode:
procedure TInfoTunesService.ServiceExecute(Sender: TService);
begin
// Endlosschleife ftw
while not Terminated do begin
ServiceThread.ProcessRequests(True);
end;
end;
Chris
Edit: madExcept ist ein guter Tipp, danke. Dummerweise funktioniert das nicht, weil ich im Moment mit Turbo Delphi entwickle und er das Paket nicht laden kann (ich nehme an, weil man bekanntlich keine Dritt-Anbieter-Komponenten installieren kann).