AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Dienst: Auf herunterfahren/neustart des Systems reagieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Dienst: Auf herunterfahren/neustart des Systems reagieren?

Ein Thema von DelphiPeter · begonnen am 18. Sep 2008 · letzter Beitrag vom 18. Sep 2008
Antwort Antwort
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#1

Dienst: Auf herunterfahren/neustart des Systems reagieren?

  Alt 18. Sep 2008, 06:51
Hallo!

Habe da einen Dienst, der beim herunterfahren von Windows reagieren soll. Damit ist gemeint, das abschließende Aufgaben noch durchgeführt werden sollen, und das Windows dann erst heruntergefahren/neugestartet werden darf.

Ist das irgendwie machbar?

Hinweis: Der Dienst wird nicht mit dem Konto SYSTEM ausgeführt, sondern über einen Domänen-Benutzer/Admin.


Peter
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Dienst: Auf herunterfahren/neustart des Systems reagiere

  Alt 18. Sep 2008, 07:42
Wenn ich mal davon ausgehe, dass es sich um eine Service Anwendung handelt, dann schau dir doch einfach mal dessen Events an. Da gibts so Sachen wie OnShutDown, OnStart... Da ist doch alles dabei was du brauchst.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Dienst: Auf herunterfahren/neustart des Systems reagiere

  Alt 18. Sep 2008, 07:57
OnStart etc. ist doch aber auf den Dienst selbst bezogen oder nicht? Entsprechend kann man nur schlussfolgern das stoppen/schließen des Dienstes ein Herunterfahren des Systems als Ursache hat.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Dienst: Auf herunterfahren/neustart des Systems reagiere

  Alt 18. Sep 2008, 09:03
Spontan würde ich sagen, dass Du mit PeekMessage schaust, ob WM_POWERBROADCAST vorhanden ist.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

Re: Dienst: Auf herunterfahren/neustart des Systems reagiere

  Alt 18. Sep 2008, 09:12
Hallo,

es gibt doch da
procedure ServiceShutdown zumindest hab' ich das bei mir in 'nem Service drin und der schreibt dann was in 'ne Logdatei.

Sollte eigentlich das Gesuchte sein.

Stephan
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#6

Re: Dienst: Auf herunterfahren/neustart des Systems reagiere

  Alt 18. Sep 2008, 09:13
Nutze den Servicecontrolhandler.
http://msdn.microsoft.com/en-us/library/ms685149(VS.85).aspx
Die Callbackfunktion bekommt ne shutdown nachricht.

Soweit ich jedoch weiß, ist dies inkompatibel mit dem VCL Service. D.h. man müsste selbst einen Win32 Dienst schreiben. Könnte mich aber auch irren.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Dienst: Auf herunterfahren/neustart des Systems reagiere

  Alt 18. Sep 2008, 09:13
Wird dieses ServiceShutdown aber nicht auch aufgerufen wenn man den Dienst manuell stoppt?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

Re: Dienst: Auf herunterfahren/neustart des Systems reagiere

  Alt 18. Sep 2008, 10:03
Hallo,
Zitat von SirThornberry:
Wird dieses ServiceShutdown aber nicht auch aufgerufen wenn man den Dienst manuell stoppt?
Nein, dafür gibt es ServiceStop (oder sollte ich mich das täuschen?)
Sorry, probier es aus, schreib mal in beiden Ereignissen was in 'ne Textdatei und werte die dann aus (jeder Boot tut gut, da kommst Du dann wohl nicht dran vorbei )
Bei meinem Service gebe ich in beiden Ereignissen den gleichen Text aus, nämlich, dass der Service beendet wurde. Würde beim Stop beides aufgerufen, müsste ich den Text zweimal sehen, sehe ihn aber nur einmal, daraus schließe ich: Stop ruft kein ShutDown auf.

Stephan
  Mit Zitat antworten Zitat
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Dienst: Auf herunterfahren/neustart des Systems reagiere

  Alt 18. Sep 2008, 11:58
Hi leute, wahnsinn, danke für die ganzen Antworten. ich teste das mal durch. Es wäre halt schön, wenn mein dienst seine Arbeit noch beenden kann, und Windows dann erst heruntergefahren wird.

Mal sehn, melde mich dann wieder!

gruß,
Peter
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Dienst: Auf herunterfahren/neustart des Systems reagiere

  Alt 18. Sep 2008, 15:22
Ich schätze mal, es geht prinzipiell darum, den Dienst sauber zu beenden. Unabhängig ob das durch ein manuelles Stoppen des Dienstes passiert oder durch Herunterfahren des Bestriebsystems...

Dafür sollte doch aber das OnStop Event zuständig sein, oder?

Ich hab schon lang keinen Dienst mehr in Delphi geschrieben, aber unter .NET sieht bei mir ein funktionierender Dienst so aus:

Der Dienst:
Code:
public partial class ImaService : ServiceBase
{
    public ImaService()
    {
        InitializeComponent();
    }

    private ThreadStart ts;
    private Thread t;
    private DeadLiner ima;

    protected override void OnStart(string[] args)
    {
        // TODO: Add code here to start your service.
        ima = new DeadLiner();
        ts = new ThreadStart(ima.Execute);
        t = new Thread(ts);
        t.Start();
    }

    protected override void OnStop()
    {
        // TODO: Add code here to perform any tear-down necessary to stop your service.
        //DeadLiner.isRunning = false;
        t.Abort();
        t.Join();
    }


}
OnStop wird aufgerufen, wenn der Dienst beendet wird. Die eigentliche Funktionalität des Dienstes wird in der DeadLiner Klasse in einem separatem Thread erledigt. Der Hauptteil sieht etwas so aus:

Code:
class DeadLiner
{
    public void Execute()
    {
        Init();

        try
        {
            while (true)
            {
                Check();
                Thread.Sleep(checkInterval*1000);
            }
        }
        catch (ThreadAbortException e)
        {
        }
        finally
        {
            Finish();
        }
    }

    private void Finish()
    {
        // TODO: Do some finalization stuff here

        log.Write("End");
        log.Stop();

        CloseConnections();
    }
}
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz