Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem : Dienst unter Windows 2003 (https://www.delphipraxis.net/141280-problem-dienst-unter-windows-2003-a.html)

moelski 6. Okt 2009 09:23


Problem : Dienst unter Windows 2003
 
Moin !

Ich habe einen kleinen Dienst geschrieben der eigentlich nix anderes tut als Anwendungen im System Mode nachzustarten. Funzt auf XP ganz gut.

Unter Server 2003 geht das aber nicht. Im eventlog steht folgendes:
Zitat:

Der Dienstprozess konnte keine Verbindung mit dem Dienstcontroller herstellen.
Wenn man den Service erstellen lässt, dann steht da ja auch schon folgendes:
Zitat:

// Für Windows 2003 Server muss StartServiceCtrlDispatcher
// CoRegisterClassObject aufgerufen werden, das von Application.Initialize
// indirekt aufgerufen werden kann. TServiceApplication.DelayInitialize ermöglicht,
// dass Application.Initialize von TService.Main aufgerufen werden kann
// (nachdem StartServiceCtrlDispatcher aufgerufen wurde).
//
// Eine verzögerte Initialisierung des Application-Objekts könnte sich auf
// Ereignisse auswirken, die dann vor der Initialisierung auftreten, wie z.B.
// TService.OnCreate. Dies wird nur empfohlen, wenn ServiceApplication
// ein Klassenobjekt bei OLE registriert und sollte nur in Verbindung mit
// Windows 2003 Server verwendet werden.
Kann mir jemand mal ein Stückchen Code zeigen wo ich nun was zusätzlich aufrufen muss?

Ich habe im Web dazu das gefunden:
Delphi-Quellcode:
function IsRunningInInstallMode : Boolean;

  function FindSwitch(const Switch: string): Boolean;
  begin
    Result := FindCmdLineSwitch(Switch, ['-', '/'], True);
  end;

begin
  Result := FindSwitch('REGSERVER') or FindSwitch('UNREGSERVER') or
            FindSwitch('INSTALL')  or FindSwitch('UNINSTALL');
end;

procedure TAISConnectMail.ServiceExecute(Sender: TService);
begin
  { Windows 2003 Server support. The problem is that you should always call
    StartServiceCtrlDispatcher (done in VCL) before calling CoRegisterClassObject
    (done from Application.Initialize). Win2003 now enforces this explicitly, but
    earlier versions did nothing if this was done improperly. }
  if not IsRunningInInstallMode then
    SvcMgr.Application.Initialize;

  while not Terminated do
  begin
    ServiceThread.ProcessRequests(false);
    Sleep(500);
  end;
end;
Aber das funktioniert bei mir so nicht.

SvB 6. Okt 2009 09:44

Re: Problem : Dienst unter Windows 2003
 
Ich glaube, Dein Problem liegt wo anders. Wie startest Du denn die zusätzlichen Anwendungen? Wo liegen denn die zusätzlichen Anwendungen? Wenn die z.B. auf einem Netzwerklaufwerk liegen, dann kann der Dienst, der unter dem Systemkonto gestartet ist, nicht darauf zugreifen, da je keine Anmeldeinformationen zum Netzwerklaufwerk vorhanden sind.
Kannst Du genau bestimmen, wann das Problem in Deinem Code auftaucht.

Ich selbst habe auch einen Dienst unter Server 2003 am laufen und habe da nichts extra Programmiert (IsRunnunInInstallMode)

Grüße Sven

moelski 6. Okt 2009 09:52

Problem erledigt : Dienst unter Windows 2003
 
Moin !

Ich glaube es war mein eigener Fehler.
Ich wollte den Dienst mit "name /REGISTER" installieren. Wenn ich statt dessen "name /INSTALL" verwende klappt es wunderbar.

Zitat:

Ich glaube, Dein Problem liegt wo anders.
Ne das geht schon. Die zusätzlichen Anwendungen sind zugreifbar für den Dienst und die sollen auch im System Context mit laufen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz