Einige Erklärungen: Für ein Projekt, an dem ich gerade arbeite, muss ich ein Programm schreiben, das im Hintergrund läuft, Änderungen an Dateien erkennt und die geänderten Dateien auf einen Web-Service hochlädt, um sie für andere verfügbar zu machen. Ganz einfache Synchronisation, wenn es nicht der Fall wäre, wenn ein Benutzer eine große Datei ändert und beschließt, den Computer unmittelbar nach der Bearbeitung herunterzufahren.
Ich könnte den Upload abbrechen und auf den nächsten Neustart warten, um den Upload durchzuführen, aber ich kann mir vorstellen, dass der Benutzer die Datei am nächsten Morgen aus dem Internet auf einen anderen Computer lädt und nicht versteht, warum seine Änderungen von letzter Nacht t dort.
Meine Idee war es herauszufinden, wann sich die Benutzer abmelden oder Windows neu starten, und wenn ich mitten in einem Upload bin, frage einfach den Benutzer "Wir synchronisieren immer noch die Datei Foo.txt
, die Sie gerade geändert haben sicher, dass Sie neu starten möchten? Ihre Änderungen sind für andere erst verfügbar, wenn Sie Ihren Computer neu starten! ". Wenn der Benutzer nein sagt, muss ich den Neustart / die Abmeldung abbrechen.
Ist das möglich?
Es gibt eine statische Klasse namens SystemEvents
, die dieses Verhalten aufdeckt:
Es kann jedoch nicht zwischen bestimmten Aktionen unterscheiden und den Timeout-Schutz des Betriebssystems nicht anhalten. Ich habe es einmal verwendet, aber das Standard-Timeout, wie es in der Registrierung konfiguriert ist, ist ein wenig zu kurz und wird wahrscheinlich zunehmen müssen.
Um es kurz zu machen, es fühlte sich alles ein wenig hackisch an.
Um zu @ Adams Antwort hinzuzufügen, können Sie, wenn Sie den Unterschied zwischen Abmelden und Herunterfahren / Neubooten unterscheiden müssen, mit WM_QUERYENDSESSION Nachricht.
" Änderungen beim Herunterfahren für Windows Vista " ist ein nützlicher Artikel, um das Zeitlimit beim Herunterfahren zu verstehen.
Der Versuch, einen Shutdown zu blockieren, ist in diesen Tagen ein verlustreiches Angebot, in Vista und höher ist das nicht mehr möglich. Eine Eingabeaufforderung ist nicht lesbar oder erreichbar. Die Verwendung eines Dienstes wird hier sehr angezeigt, damit Sie eine Benutzerabmeldung überleben können. Nach einem Neustart wird Ihr Dienst automatisch wieder gestartet und Sie können den Job abschließen.
Tags und Links .net c# windows system-shutdown