Seite 1 von 1

Launcher Daemon

Verfasst: 20.10.2010 14:11
von cxAlex
Ein kleiner Daemon den ich mir in 5 Minuten zusammengeschustert habe der schlicht und einfach dafür sorgt das Programme am laufen bleiben und sie bei Bedarf einfach neu startet (Wie zum Beispiel abstürzende Proxy-Server ... :twisted: )

Der Source sollte leicht verständlich sein.

Code: Alles auswählen

; Daemon Daten
Structure DAEMON_Data
  Program$
  Para$
  Path$
  Stop.i
EndStructure

; Daemon arbeiter
Procedure DAEMON_Worker(*Daemon.DAEMON_Data)
  Protected hProg
  
  With *DAEMON
    Repeat
      
      ; Stop - Flag, wir beenden ...
      If \Stop
        SignalSemaphore(\Stop)
        ProcedureReturn #True
      EndIf
      
      ; Programm starten ...
      hProg = RunProgram(\Program$, \Para$, \Path$, #PB_Program_Open)
      If Not IsProgram(hProg)
        Break  
      EndIf
      
      ; Läuft das Programm noch?
      While ProgramRunning(hProg)
        Delay(100)
        If \Stop
          SignalSemaphore(\Stop) 
          ProcedureReturn #True
        EndIf
      Wend
      
    ForEver
    ; Auf das Beenden warten
    Repeat
      Delay(10)
    Until \Stop
    SignalSemaphore(\Stop)
    
  EndWith
EndProcedure

; Daemon starten
Procedure DAEMON_Start(Program$, Para$ = "", Path$ = "")
  Protected *DAEMON.DAEMON_Data = AllocateMemory(SizeOf(DAEMON_Data))
  InitializeStructure(*DAEMON, DAEMON_Data)
  
  With *DAEMON
    
    ; Parameter erstellen
    \Program$ = Program$
    \Para$ = Para$
    If Not Path$
      \Path$ = GetPathPart(Program$)
    Else
      \Path$ = Path$
    EndIf
    
    CreateThread(@DAEMON_Worker(), *DAEMON)
  EndWith
EndProcedure

; Daemon beenden
Procedure DAEMON_Stop(*Daemon.DAEMON_Data)
  With *Daemon
    ; Daemon beenden
    \Stop = CreateSemaphore()
    WaitSemaphore(\Stop)
    FreeSemaphore(\Stop)
    
    ; Daemon Freigeben
    ClearStructure(*Daemon, DAEMON_Data)
    FreeMemory(*Daemon)
  EndWith
EndProcedure


DAEMON_Start("cmd")

Repeat
  Delay(10)
ForEver
Gruß, Alex

Re: Launcher Daemon

Verfasst: 20.10.2010 16:36
von Bisonte
Ich hab es nun noch nicht getestet, aber startet das Teil auch Programme neu,
wenn die Meldung von Windows aufpoppt : "Problem festgestellt... blabla" die auf
eine Usereingabe wartet ?

Re: Launcher Daemon

Verfasst: 20.10.2010 16:41
von cxAlex
Nein, weil das Programm da eigentlich noch läuft :P Aber zumindest bei mir ist es so das Windows das Programm dann nach einer gewissen Zeit von alleine abschießt und dann wird es neu gestartet ...

Re: Launcher Daemon

Verfasst: 20.10.2010 16:43
von Bisonte
Hast du eine Ahnung wo man das einstellen könnte ? Win7 ?
Bei mir dauert es mindestens gefühlte Ewigkeiten (Bäume werden zu Öl usw.) ,
bzw. hab ich das Verhalten noch nicht bemerkt bei mir.

Edit: Wäre es evt. dieses hier ?
und dann AutoEndTasks ?