locked
Meldung vor Herunterfahren RRS feed

  • Frage

  • Hallo zusammen,

    unsere Benutzer sollen vor dem Herunterfahren (Windows 7 Clients) eine Erinnerung erhalten, dass Sie sich im Zeiterfassungssystem abmelden sollen (automatischer Start des IE mit vorgefertigter Webseite). Ich habe einige Einträge dazu gefunden, allerdings helfen mir diese nicht weiter, da bei mir kein Skript beim Herunterfahren ausgeführt wird. Skripte zur Anmeldung funktionieren einwandfrei.

    Wenn ich die Skripte manuell ausführe, werden Sie ebenfalls ausgeführt. Es handelt sich hierbei um kleine Batch-Dateien, die den IE starten und das Herunterfahren verzögern sollen.

    Eine Alternative die ich mir bereits überlegt hätte: "Herunterfahren" ausblenden und hierfür wieder eine eigene Batch verteilen. Problem dabei ist aber, dass ich nicht nur das "Herunterfahren" alleine, sondern auch das "Neu starten", etc. mit ausblenden muss. Somit müsste ich auch für diese Fälle eine Batch verteilen, was insgesamt alles sehr unschön wird.

    Kann mir diesbezüglich evtl. wer weiterhelfen?

    Vielen Dank im Voraus

    Montag, 14. November 2016 12:31

Antworten

  • Hallo Jo_Wo,

    ich hatte mal eine ähnliche Aufgabenstellung während meiner Ausbildung. Ich habe es mit einem kurzen C#.NET Skript gelöst (so musst Du Dir keine Sorge um die ExecutionPolicy bzgl PowerShell machen) und die compilierte .exe im Autostart die ganzen Zeit im Hintergrund laufen lassen (kann man sicherlich auch als Dienst machen ;) ). Visual Studio Express gibt es ja kostenlos.

    private void HookSessionEnding()
            {
                try
                {
                    Microsoft.Win32.SystemEvents.SessionEnding += new Microsoft.Win32.SessionEndingEventHandler(this.OnSessionEnding);
                }
                catch (Exception fehler)
                {
                    MessageBox.Show("Fehler:" + Environment.NewLine + fehler.Message + Environment.NewLine + "Bitte wenden Sie sich an Ihren Systemadministrator.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    
            private void OnSessionEnding(object sender, Microsoft.Win32.SessionEndingEventArgs e)
            {
                try
                {
                    MessageBox.Show("Bitte vergessen Sie nicht, sich aus der Zeitverwaltung auszuloggen.", "Erinnerung", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    System.Diagnostics.Process Zeiterfassung = new System.Diagnostics.Process();
                    Zeiterfassung.StartInfo.FileName = "C:/Programme/Internet Explorer/iexplore.exe www.google.de";
                    Zeiterfassung.Start();
                }
                catch (Exception fehler)
                {
                    MessageBox.Show("Fehler:" + Environment.NewLine + fehler.Message + Environment.NewLine + "Bitte wenden Sie sich an Ihren Systemadministrator.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    
            
    
            private void Hide(object sender, EventArgs e)
            {
    
                this.Hide();
    
            }

    Beim Herunterfahren sendet Windows an alle geöffneten Programme ein Event, das der Spaß jetzt vorbei ist und sich alle Programme bitte beenden sollen.

    Genau dieses Event fange ich ab und schmeiße eine MessageBox "OnSessionEnding". Diese wiederum kann nicht einfach beendet werden und Windows unterbricht das Herunterfahren - "einige Apps/Programme verhindern das herunterfahren" die bekannte Meldung.

    Die MA werden mit dem Text in der MessageBox an Ihre Zeiterfassung erinnert und können in dem Windows Dialog auf "Abbrechen" klicken - nach einem Klick auf OK in der MessageBox öffnet sich der IE mit vordefinierter URL.

    Man kann die MessageBox auch noch umbauen mit Ja/Nein Buttons und dann zum Beispiel das eher so aufbauen:

    Hast Du Dich schon aus der Zeiterfassung ausgeloggt?

    - Ja --> shutdown

    - Nein --> Starte den IE

    Hat immer ganz gut funktioniert für meinen Anwendungsfall!



    Freundliche Grüße

    Sandro
    MCSA: Windows Server 2012
    Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)




    • Bearbeitet SandroReiter Dienstag, 15. November 2016 07:31
    • Als Antwort markiert Jo_Wo Dienstag, 15. November 2016 13:30
    Dienstag, 15. November 2016 07:30

Alle Antworten

  • Hallo

    Blende über GPO den Punkt "Herunterfahren" aus dem Startmenü aus. Du kannst ja einen neuen Link dann zum Startmenü hinzufügen, dass auf deine batch verweist....


    Montag, 14. November 2016 13:23
  • Hallo,

    kann ich denn nur den Punkt "Herunterfahren" ausblenden? Meines Wissens blende ich damit die Punkte "Neu starten", etc. auch aus oder? Deshalb habe ich das ja bereits dazugeschrieben:

    "Eine Alternative die ich mir bereits überlegt hätte: "Herunterfahren" ausblenden und hierfür wieder eine eigene Batch verteilen. Problem dabei ist aber, dass ich nicht nur das "Herunterfahren" alleine, sondern auch das "Neu starten", etc. mit ausblenden muss. Somit müsste ich auch für diese Fälle eine Batch verteilen, was insgesamt alles sehr unschön wird."

    Montag, 14. November 2016 13:32
  • Hi,

    geht einmal über die REGESTRY 

    [für den Anwender]
    HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ Policies\ Explorer
     
    [für das System (alle Anwender)]
    HKEY_LOCAL_MACHINE\ Software\ Microsoft\ Windows\ CurrentVersion\ Policies\ Explorer
     
    Erstellen Sie hier einen neuen Wert mit dem Namen "NoClose" als Datentyp REG_DWORD. Setzen Sie den Wert auf: 1

    Und per GPO

    Administrative Vorlagen\Startmenü und Taskleiste

    Befehl "Herunterfahren" entfernen und Zugriff darauf verweigern

    Befehl "Herunterfahren" entfernen und Zugriff darauf verweigern

    Befehl "Herunterfahren" entfernen und Zugriff darauf verweigern

    • Als Antwort vorgeschlagen Peter Rupp Montag, 14. November 2016 15:44
    • Nicht als Antwort vorgeschlagen Jo_Wo Dienstag, 15. November 2016 13:30
    Montag, 14. November 2016 13:38
  • Hallo Jo_Wo,

    ich hatte mal eine ähnliche Aufgabenstellung während meiner Ausbildung. Ich habe es mit einem kurzen C#.NET Skript gelöst (so musst Du Dir keine Sorge um die ExecutionPolicy bzgl PowerShell machen) und die compilierte .exe im Autostart die ganzen Zeit im Hintergrund laufen lassen (kann man sicherlich auch als Dienst machen ;) ). Visual Studio Express gibt es ja kostenlos.

    private void HookSessionEnding()
            {
                try
                {
                    Microsoft.Win32.SystemEvents.SessionEnding += new Microsoft.Win32.SessionEndingEventHandler(this.OnSessionEnding);
                }
                catch (Exception fehler)
                {
                    MessageBox.Show("Fehler:" + Environment.NewLine + fehler.Message + Environment.NewLine + "Bitte wenden Sie sich an Ihren Systemadministrator.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    
            private void OnSessionEnding(object sender, Microsoft.Win32.SessionEndingEventArgs e)
            {
                try
                {
                    MessageBox.Show("Bitte vergessen Sie nicht, sich aus der Zeitverwaltung auszuloggen.", "Erinnerung", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    System.Diagnostics.Process Zeiterfassung = new System.Diagnostics.Process();
                    Zeiterfassung.StartInfo.FileName = "C:/Programme/Internet Explorer/iexplore.exe www.google.de";
                    Zeiterfassung.Start();
                }
                catch (Exception fehler)
                {
                    MessageBox.Show("Fehler:" + Environment.NewLine + fehler.Message + Environment.NewLine + "Bitte wenden Sie sich an Ihren Systemadministrator.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    
            
    
            private void Hide(object sender, EventArgs e)
            {
    
                this.Hide();
    
            }

    Beim Herunterfahren sendet Windows an alle geöffneten Programme ein Event, das der Spaß jetzt vorbei ist und sich alle Programme bitte beenden sollen.

    Genau dieses Event fange ich ab und schmeiße eine MessageBox "OnSessionEnding". Diese wiederum kann nicht einfach beendet werden und Windows unterbricht das Herunterfahren - "einige Apps/Programme verhindern das herunterfahren" die bekannte Meldung.

    Die MA werden mit dem Text in der MessageBox an Ihre Zeiterfassung erinnert und können in dem Windows Dialog auf "Abbrechen" klicken - nach einem Klick auf OK in der MessageBox öffnet sich der IE mit vordefinierter URL.

    Man kann die MessageBox auch noch umbauen mit Ja/Nein Buttons und dann zum Beispiel das eher so aufbauen:

    Hast Du Dich schon aus der Zeiterfassung ausgeloggt?

    - Ja --> shutdown

    - Nein --> Starte den IE

    Hat immer ganz gut funktioniert für meinen Anwendungsfall!



    Freundliche Grüße

    Sandro
    MCSA: Windows Server 2012
    Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)




    • Bearbeitet SandroReiter Dienstag, 15. November 2016 07:31
    • Als Antwort markiert Jo_Wo Dienstag, 15. November 2016 13:30
    Dienstag, 15. November 2016 07:30
  • Hallo,

    also ich habe das Ganze nun auch mal per Registry versucht - auch dort wird "Neu starten", etc. mit ausgeblendet. Eigentlich genauso wie sich die Einstellung bei mir in der GPO anhört ("Remove and prevent access to the Shut Down, Restart, Sleep, and Hibernate commands").

    Grüße

    Dienstag, 15. November 2016 08:06
  • Hallo Sandro,

    danke für den Tipp, funktioniert soweit ganz gut. Ein paar kleine Anpassungen werde ich noch vornehmen, aber grundsätzlich hast du mich auf den richtigen Weg geführt.

    Grüße

    Dienstag, 15. November 2016 13:30
  • Freut mich das ich Dir den Weg zeigen konnte :)


    Freundliche Grüße

    Sandro
    MCSA: Windows Server 2012
    Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)



    Dienstag, 15. November 2016 14:44