Ali_Spindler
Guten Morgen @ all,
ich hätte da mal ne Frage an euch Profis.
Ist es möglich bei einem eingeleiteten Windows-Shutdown noch kurz einen externen Prozess zu starten und kurze Zeit später wieder zu beenden?
C#-Code: |
SetProcessShutdownParameters(0x3FF, 0x00000001);
|
C#-Code: |
ShutdownBlockReasonCreate(F.Handle, Description);
|
Mit den zwei vorherigen Methoden verhindere ich den Shutdown, dies funktioniert auch einwandfrei. Bei Windows 7 erscheint nun auch der Bildschirm "Warten bis folgendes Programm beendet wird .....".
Nun müsste ich noch kurz einen Prozess starten, etwas auslesen und danach kurz wieder mit Process.kill() beenden. Er startet zwar, wird aber sofort vom Windows wieder beendet. Dies geht so schnell dass ich nicht darauf reagieren kann.
Gibt es nun eine Möglichkeit den Prozess so zu starten, dass er auch zwingend ausgeführt bleibt und auch offen bleibt?
mfG Ali
herbivore
Hallo Ali_Spindler,
| Zitat: |
| Mit den zwei vorherigen Methoden verhindere ich den Shutdown, dies funktioniert auch einwandfrei. Bei Windows 7 erscheint nun auch der Bildschirm "Warten bis folgendes Programm beendet wird .....". |
ist das nicht ein Widerspruch? Wenn der Shutdown erfolgreich verhindert wird, sollten keine Programme beendet werden und es sollte entsprechend auch keine solche Meldung angezeigt werden.
| Zitat: |
| Er [der Prozess] startet zwar, wird aber sofort vom Windows wieder beendet. |
Auch das ist ein Indiz dafür, dass der Shutdown nicht abgebrochen wurde.
Wenn es dir tatsächlich gelingt, den Shutdown abzubrechen, wäre das die Lösung deines Problems. Du könntest dann in Ruhe den Prozess starten, auf sein Ende warten und dann den Shutdown neu initiieren (natürlich ohne ihn dann wieder abzubrechen). Allerdings setzt das voraus, dass deine Anwendung die nötigen Rechte sowohl zum Abbrechen als auch zum erneuten Auslösen des Shutdowns hat.
herbivore
Ali_Spindler
Hi,
sorry, ich hab mich falsch ausgedrückt. Der Shutdown wird nicht abgebrochen. Er wird lediglich verzögert bis man mit der Funktion
C#-Code: |
ShutdownBlockReasonDestroy(F.Handle);
|
wieder sagt dass das Beenden aller Programme und der Shutdown ausgeführt werden können.
Bei Windows 7 ist es anscheinend nicht mehr möglich einen Shutdown silent im Hintergrund zu unterbinden. Es kommt immer das besagte Fernster.
Und obwohl dieses Fenster da ist und Windows auf seine Shutdownfreigabe wartet müsste ich nun noch kurz diesen einen Prozess.......
mfG Ali
ujr
Kannst Du nicht WM_QUERYENDSESSION benutzen?
scrabbl
Ist das Programm welches den Shutdown blockt ein WinForms Programm ?
Ali_Spindler
Hi,
ja, ist ein WinForms Programm.
Das mit WM_QUERYENDSESSION funktioniert bei Win7 nicht wie gewollt.
Es kommt trotzdem der schwarze bildschirm, aber der Shutdown wird nicht abgebrochen.
mfG Ali
scrabbl
Also Für ein WinForms Programm habe ich sowas auch mal gemacht.
Ich hab im FormClosing-Event der HauptForm:
C#-Code: |
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.WindowsShutDown)
e.Cancel = true;
}
|
Und unter diesem Kontext lies sich unter Win7 da auch ein anderes Programm starten. Wichtig zu wissen ist nur das der ShutDown nicht vollständig blockiert wird. Meines Wissens ist in der Registry ein Key für eine Zeitspanne hinterlegt, wenn nach der dein Programm die Blockade nicht aufgegeben hat wird es "zwangsbeendet". D.h. je nachdem wielange das aufgerufene Programm dauert wird es trotzdem schwer.
Ali_Spindler
Hi,
danke für eure Antworten. So Funktioniert´s.
Ist zwar vielleicht nicht der schönste Weg, aber es tut.
mfG Ali
tom-essen
Hallo!
Aber genau dafür ist es gedacht: Ein Programm soll die Möglichkeit erhalten, vor einem Shutdown Daten zu sichern, ...
herbivore
Hallo zusammen,
ich bin gerade auf einen Artikel zu dem Thema bzw. einem ähnlichen Thema gestoßen. Darin geht es zwar nicht darum, wie man aus einem Prozess beim Shutdown einen neuen startet, aber darum, wie man - ähnlich der Autostart-Funktion beim Systemstart - Skripte/Programme einrichten kann, die beim Abmelden bzw. Herunterfahren automatisch gestartet werden:
Hajo Schulz
Betthupferl
„Autostart“ für den Windows-Shutdown
c't 15/2012, S. 158
Praxis, Windows-Shutdown, Windows, Abmelden, Shutdown, gpedit.msc, Herunterfahren, Gruppenrichtlinien, SkyDrive, Dropbox, Google Drive, Logoff, c't-Shutdown |
Das geht bei Windows 7 allerdings nur bei Professional, Enterprise und Ultimate, aber leider nicht bei Home und Starter.
Die Einstellungen finden sich in den Gruppenrichtlinien (z.B. per "gpedit.msc" im Suchfeld des Startmenüs).
Dort gibt es zwei Stellen, in denen man die Programme/Skripte eintragen kann:
- Benutzerkonfiguration/Windows-Einstellungen /Skripts (Anmelden/Abmelden)
- Computerkonfiguration/Windows-Einstellungen/Skripts (Start/Herunterfahren)
herbivore