Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C# PC mit USV: Wie Software korrekt beenden? (https://www.delphipraxis.net/184217-pc-mit-usv-wie-software-korrekt-beenden.html)

Matze 9. Mär 2015 20:06

PC mit USV: Wie Software korrekt beenden?
 
Hallo zusammen,

meine C#-Datenbankanwendung läuft auf PCs mit USV.
Für alle, die nicht wissen, was eine USV ist: Eine USV (= Unterbrechungsfreie Stromversorgung) ist ein Akku mit etwas Intelligenz drum herum, der im Falle eines Stromausfalls den PC noch eine Weile am Leben halten kann und dann gezielt herunterfährt.

Ich bin mir nicht sicher, wie USVs normalerweise arbeiten:
Schießen USVs die Prozesse knallhart ab und fahren Windows dann herunter?
Werden die Programme davor ordnungsgeäß beendet?
Ich vermute eher ersteres oder letzteres mit Timeout, damit Windows in jedem Fall herunterfährt bevor der Akku leer ist.

Im "Window_Close"-Ereignis frage ich nach, ob die Software beendet werden soll. Beim Herunterfahren des PCs ohne USV erscheint diese Nachfrage nicht. Mit habe ich es noch nicht testen können.

Wie kann ich denn auf die USV reagieren und die Datenbanken gezielt schließen, sodass keine beschädigten Datenbanken entstehen? Geht sowas mit dem SystemEvents.SessionEnding-Ereignis?

Grüße
Matze

himitsu 9. Mär 2015 20:23

AW: PC mit USV: Wie Software korrekt beenden?
 
MSDN-Library durchsuchenWM_QUERYENDSESSION? (Fragen)
In Delphi reagiert die TopLevelForm/MainForm auf WM_QUERYENDSESSION und die VCL ruft dann OnCloseQuery auf.

WM_ENDSESSION = entgültig Beenden, ohne Fragen

Terminate / PostQuitMessage / ... = Beenden, ohne Fragen



Erstmal kommt es drauf an, was für eine USV das ist.

Wenn die genug Energie hat, um den Stromausfall "länger" komplett zu überbrücken, dann braucht sie garnichts zu machen, außer den Strom zu liefern.
Ansonsten haben ordentliche USVs eine Schnittstelle zum PC (Seriell, USB, LAN, PCI, ...) und steuern dort das Runterfahren an.
Entweder über Treiber oder einen ständig mitlaufenden Service.

Entweder es wird sofort runtergefahren und die USV kann nur wenige Minuten überbrücken (bei voller PC-Leistung) oder es wird noch etwas gewartet (Zeit oder bis Akkurestenergie).

Theoretisch könnte man sich auch in den Powerschalter (Taster) reinhängen, aber erstens ist das nicht "sicher" und ich hab es auch noch nie gesehn.

Und billige USVs haben keine Verbindung und irgendwann ist dann auch der Notstrom einfach so alle *blubb*

Matze 9. Mär 2015 20:30

AW: PC mit USV: Wie Software korrekt beenden?
 
Hallo himi!

Zitat:

Zitat von himitsu (Beitrag 1292840)
WM_QUERYENDSESSION?

Das wäre auch das, was ich verlinkt habe. Vielleicht geht's wirklich in die Richtung.

Zitat:

Zitat von himitsu (Beitrag 1292840)
Erstmal kommt es drauf an, was für eine USV das ist.

Die USV ist bisher immer von APC gewesen und per USB mit dem PC verbunden. Die APC-Softare veranlasst das Herunterfahren dann.
Schön wäre natürlich eine herstellerunabhängige Lösung.

Zitat:

Zitat von himitsu (Beitrag 1292840)
Wenn die genug Energie hat, um den Stromausfall "länger" komplett zu überbrücken, dann braucht sie garnichts zu machen, außer den Strom zu liefern.

Die USVs können die PCs geschätzte 20 Minuten versorgen.
Aber du kennst die Zustände in China nicht, da haben wir schon ganz andere Erfahrungen gemacht. Kurze Stromausfälle gibt's häufiger und wenn mal an Stromleitungen gearbeitet wird kann es sein, dass man einen halben Tag keinen Strom hat (bei uns wäre das undenkbar). ;)

Grüße
Matze

himitsu 9. Mär 2015 20:37

AW: PC mit USV: Wie Software korrekt beenden?
 
Zitat:

Zitat von Matze (Beitrag 1292841)
Das wäre auch das, was ich verlinkt habe.

Hatte oben noch bissl was hinzugefügt.


APC-Softare: Unabhängig wäre es Grundsätzlich erstmal, da jede USV ihre nötige Sofware mitbringen sollte

und letztendlich wird es darauf hinaus laufen, daß die Software einen stinknormalen "Shutdown"-Befehl ans Windows schickt.
Eventuell kann man in der Software noch vorherrige Events registrieren, so ala "Führe Programm XYZ aus", wenn die USV anspringt oder der wenn der Netzstrom wieder da ist.
Und hoffentlich kann man auch die Art des Runterfahrens einstellen. (Ruhezustand, Runterfahren mit warten oder Runterfahren mit Abschießen, wenn zu lange dauert)

Matze 9. Mär 2015 20:41

AW: PC mit USV: Wie Software korrekt beenden?
 
Vielen Dank.
Ich schaue morgen mal nach, was sich in der Software genau einstellen lässt und melde mich dann wieder.

Grüße
Matze

Dalai 9. Mär 2015 21:19

AW: PC mit USV: Wie Software korrekt beenden?
 
Zitat:

Zitat von Matze (Beitrag 1292841)
Schön wäre natürlich eine herstellerunabhängige Lösung.

Das wird nix werden. Jeder USV-Hersteller baut seine eigenen proprietären Chips in seine Geräte. Sogar die Open Source Community, die sich mit apcupsd nur um USVs von APC kümmern, unterstützen nicht alle Modelle dieses einen Herstellers, meist einfach deshalb, weil die Specs fehlen (wie fast immer bei Open Source und/oder Linux). Trotzdem bleibt apcupsd eine tolle Software, die bei weitem nicht so aufgeblasen daher kommt wie das Zeug von APC (das IIRC auf Java basiert).

Und ja, es läuft simpel und einfach so, dass der laufende Dienst den PC ganz normal herunterfährt, wenn die USV die im Dienst eingestellten Grenzen erreicht oder unterschreitet (entweder Ladestand oder Restlaufzeit). Und das funktioniert auch wunderbar.

MfG Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 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