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.