Programm verhindert Neustart

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RobinH.

    Programm verhindert Neustart

    Hallo,

    hoffentlich könnt ihr mir hier helfen.

    Ich habe ein Programm mit VB geschrieben, was auch gut funtktioniert.
    Kurz zum Aufbau (hat aber nichts mit dem Problem zu tun - nur zur Erklärung):

    Es gibt ein Userform, welches aber nur selten genutzt wird, denn es dient nur zur Einstellung des Programms (gespeichert wird in der WindowsRegistry).
    Nach dem Autostart erscheint im WindowsTray ein Icon, das angeklickt werden kann (rechts oder links). Das Kontextmenü, welches sich dann öffnet kann in dem UserForm eingestellt werden,
    aber die untersten beiden Einträge sind IMMER 'Einstellungen' und 'Beenden'. (Einstellungen ruft die Userform auf und Beenden beendet das Programm).

    Normalerweise läuft das Programm aber immer (startet mit dem PC und endet, wenn der PC runter fährt). Nun ist es mir mehrfach versehentlich passiert, dass ich das Kontextmenü öffnen wollte und dann irgendwie auf 'Beenden' geklickt habe. ;)

    Um dies zu verhindern habe ich mir eine Sicherungsfrage eingebaut:

    VB.NET-Quellcode

    1. Private Sub UF_Settings_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    2. 'Programm beenden
    3. Dim a As Object
    4. 'Abbruch des Startes mit dem X an der Meldung
    5. If BlnKillStart = True Then Exit Sub
    6. a = MsgBox("Soll das Programm komplett beendet werden, einschl. TraySymbol?", vbYesNo + vbDefaultButton2 + vbQuestion, "kurze Frage zur Sicherheit...")
    7. If a = vbYes Then
    8. 'Prüfe, ob min 1 Speichermethode ausgewählt wurde
    9. If ChkSaveRegistry.Checked = False And ChkSaveDatei.Checked = False Then
    10. 'keine Speichermethode
    11. a = MsgBox("Es wurde KEINE Speichermethode gewählt!" & L2 & "Alle Änderungen gehen verloren!" & L2 &
    12. "Programm trotzdem beenden?", vbYesNo + vbCritical + vbDefaultButton2, "WARNUNG - Datenverlust - WARNUNG")
    13. If a = vbNo Then e.Cancel = True
    14. Else
    15. 'speichern
    16. Speichern()
    17. e.Cancel = False
    18. End If
    19. Else
    20. 'nicht beenden
    21. e.Cancel = True
    22. End If
    23. End Sub


    Hiermit sollte das versehentliche Schließen verhindert werden, was gut sehr gut funktioniert, ABER

    wenn ich den PC (Windows 10 Pro) neu starten oder herunterfahren möchte, kommt der sicherlich bekannte blaue Bildschirm "Folgende Programme verhindern den Neustart" und mein kleines Programm steht drin. ;(

    Deaktiviere ich diese Prozedur, dann startet Windows ohne Probleme.

    Die Frage nach der Speicherung steht zwar noch da, aber das kann eigentlich nicht mehr vorkommen - es kommt immer nur die erste Meldung.

    Weiß hier jemand Rat?

    Viele Grüße
    Robin
    Viele Grüße
    Robin
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Danke mrMo,

    also mein Wissensstand C# geht zur Zeit gegen 0 :D

    mein Prog ist doch in VB.net und da bin ich auch kein Meister

    kann ich mir die Ursache für das Herunterfahren anzeigen lassen, wenn Windows beendet wird?
    Microsoft gibt solche Seiten leider nur in C# an - vielleicht hast du eine Idee für VB.net?
    Viele Grüße
    Robin
    Hallo Dksksm,

    ach du schande...... jetzt war ich schon so oft auf diesen Seiten aber diese klitzekleine Einstellung habe ich echt überlesen.

    Vielen Dank für diesen Tipp!
    Viele Grüße
    Robin
    Noch ein kleiner Tipp: Manchmal ist es besser, die MSDN-Seiten auf Englisch zu lesen (und zur Not mit Google Übersetzer zu übersetzen), weil deren deutsche Übersetzung oft nicht gut ist.

    Und immer dein verwendetes Framework auswählen, da sich manchmal die Namespaces oder Assemblys (.dll) unterscheiden.

    Poste bitte noch deine Lösung damit andere auch was davon haben.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo Jou.
    @RobinH Und dann drücke bitte bei den hilfreichen Posts auch den "Hilfreich"-Button, damit sofort zu sehen ist, welche Posts hilfreich waren. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das mache ich doch gerne:

    Diese Zeile habe ich oben als erstes hinzugefügt:

    VB.NET-Quellcode

    1. 'wenn Windows heruntergefahren wird, dann Programm ohne Nachfrage beenden
    2. If e.CloseReason.ToString = "WindowsShutDown" Then Exit Sub


    Dadurch wird Windows ohne Probleme heruntergefahren.
    Viele Grüße
    Robin
    @RobinH Das ist ein Enum. Behandle es auch so:

    VB.NET-Quellcode

    1. If e.CloseReason = CloseReason.WindowsShutDown Then Return
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!