Thema: Delphi Service startet nicht

Einzelnen Beitrag anzeigen

Cici

Registriert seit: 19. Apr 2005
12 Beiträge
 
#24

AW: Service startet nicht

  Alt 14. Jun 2012, 14:34
Hallo,
ich habe das gleiche Problem wie der Themenstarter <E1053:>
habe aber keine Lösung.

Versuche auch einen Service mit Delphi XE2 zu erstellen.
Im meiner Verzweifelung habe ich mich an Beispielen gehalten die bei anderen Usern bereits liefen.

Den Service installiere ich mit:
sc create "TEST" start= auto binpath= "c:\x\Servicetest.exe"
sc description "TEST" "TEST Dienst"

Starten mit:
sc start "TEST"

Der Prozess erscheint in der Win-Prozessliste und das wars dann.

Das Starten mit dem Dienstmanger ergibt Error:1053.

Es wird nicht einmal die Logdatei angelegt.
Also "oncreate" wird nicht ausgeführt.

Hier der Code:
Code:
unit ServMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs,
  Vcl.ExtCtrls;

type
  TService4 = class(TService)
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
    procedure ServiceCreate(Sender: TObject);
    procedure ServiceExecute(Sender: TService);
    procedure ServiceDestroy(Sender: TObject);
    procedure ServiceBeforeInstall(Sender: TService);
    procedure ServiceAfterUninstall(Sender: TService);
  private
    { Private-Deklarationen }
    LogFile: TStringList;
  public
    function GetServiceController: TServiceController; override;
    { Public-Deklarationen }
  end;
const LogFileName = 'Service_log.txt';
var
  Service4: TService4;

implementation

{%CLASSGROUP 'System.Classes.TPersistent'}

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  Service4.Controller(CtrlCode);
end;

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

procedure TService4.ServiceAfterUninstall(Sender: TService);
begin
   LogFile.Add(DateTimeToStr(Now)+' OnAfterInstall');
  LogFile.SaveToFile(LogFileName);
end;

procedure TService4.ServiceBeforeInstall(Sender: TService);
begin
  LogFile.Add(DateTimeToStr(Now)+' OnBeforeInstall');
  LogFile.SaveToFile(LogFileName);
end;

procedure TService4.ServiceCreate(Sender: TObject);
begin
  LogFile:=TStringList.Create;
  LogFile.Add(DateTimeToStr(Now)+' OnCreate');
  LogFile.SaveToFile(LogFileName);
end;

procedure TService4.ServiceDestroy(Sender: TObject);
begin
  LogFile.Free;
end;

procedure TService4.ServiceExecute(Sender: TService);
begin
  while not Terminated do
  begin
    LogFile.Add(DateTimeToStr(Now)+' OnExecute');
    LogFile.SaveToFile(LogFileName);
    ServiceThread.ProcessRequests(False);
    Sleep(1000);
  end;
end;

procedure TService4.ServiceStart(Sender: TService; var Started: Boolean);
begin
  LogFile.Add(DateTimeToStr(Now)+' Service gestartet');
  LogFile.SaveToFile(LogFileName);
end;

procedure TService4.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  LogFile.Add(DateTimeToStr(Now)+' Service gestoppt');
  LogFile.SaveToFile(LogFileName);
end;

end.
...und...
Code:
program Servicetest;

uses
  Vcl.SvcMgr,
  ServMain in 'ServMain.pas' {Service4: TService};

{$R *.RES}

begin
  // Für Windows 2003 Server muss StartServiceCtrlDispatcher vor
  // CoRegisterClassObject aufgerufen werden, das indirekt von
  // Application.Initialize aufgerufen werden kann. TServiceApplication.DelayInitialize
  // ermöglicht, dass Application.Initialize von TService.Main (nach
  // StartServiceCtrlDispatcher) aufgerufen werden kann.
  //
  // Eine verzögerte Initialisierung des Application-Objekts kann sich auf
  // Ereignisse auswirken, die dann vor der Initialisierung ausgelöst werden,
  // wie z.B. TService.OnCreate. Dies wird nur empfohlen, wenn ServiceApplication
  // ein Klassenobjekt bei OLE registriert und für die Verwendung mit
  // Windows 2003 Server vorgesehen ist.
  //
  // Application.DelayInitialize := True;
  //
  if not Application.DelayInitialize or Application.Installing then
    Application.Initialize;
  Application.CreateForm(TService4, Service4);
  Application.Run;
end.

Bin ich blind?
hexAsmPAsDPR???
  Mit Zitat antworten Zitat