AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem : Dienst unter Windows 2003

Ein Thema von moelski · begonnen am 6. Okt 2009 · letzter Beitrag vom 6. Okt 2009
 
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Problem : Dienst unter Windows 2003

  Alt 6. Okt 2009, 09:23
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.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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