Ermitteln wie lange Windows bereits läuft

  • VB.NET
  • .NET 4.5

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    Ermitteln wie lange Windows bereits läuft

    Hallo Leute,

    lässt sich mit VB.NET irgendwie ermitteln wie lange Windows bereits läuft (also die verstrichene Zeit seit dem letzen Hochfahren)?

    Liebe Grüße
    Roland
    Bei der Entwicklung meiner Anwendung(en) steht nicht der saubere Code im Vordergrund, sondern das Ergebnis das der Anwender schlussendlich sieht. Usability und Supportbarkeit stehen an oberster Stelle. Das spiegelt sich auch in meinen Fragen und Antworten wider.
    ​Hallo @dive26,

    Du meinst folgende Zeit?!


    Schau Dir mal das Thema an:
    Pc laufzeit

    ​oder hier:
    vbarchiv.net/tipps/tipp_1785-s…ufzeit-ermitteln-net.html

    LG Ruerte
    Trainii: 5.0%
    Abstandshalter
    Unfortunately, this Signature is not available in Germany because it may contain music for which GEMA
    has not granted the respective music rights. Sorry about that.

    Vielen Dank für den super Tipp, @Ruerte

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Diese Funktion startet Windows neu, wenn der PC mehr als 5 Tage nicht mehr neu gestartet wurde
    3. ''' </summary>
    4. ''' <remarks></remarks>
    5. Public Sub PruefeObSoftwareSchonZuLangeLaeuft()
    6. Dim WindowsLaufzeit As TimeSpan = TimeSpan.FromMilliseconds(My.Computer.Clock.TickCount)
    7. If WindowsLaufzeit.Hours > 120 Then
    8. MessageBox.Show("Ihr Windows PC läuft bereits länger als 5 Tage ohne Neustart. Wir empfehlen den Computer täglich neu zu starten. Der Computer wird nun aus Stabilitätsgründen neu gestartet!", "Computer-Neustart erforderlich!", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    9. 'Hier den PC mit 20 Sekunden Verzögerung neu starten
    10. Process.Start("shutdown", "/r /t 20")
    11. End
    12. End If
    13. End Sub
    Bei der Entwicklung meiner Anwendung(en) steht nicht der saubere Code im Vordergrund, sondern das Ergebnis das der Anwender schlussendlich sieht. Usability und Supportbarkeit stehen an oberster Stelle. Das spiegelt sich auch in meinen Fragen und Antworten wider.
    Hallo

    Bedenke bitte das der Rechner NICHT neustartet wenn der User die Mesagebox einfach auf die seite schiebt ohne auf OK zu klicken und "dich" somit überlistet!!!

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Ich finde das Thema gerade ziemlich spannend:
    Gibt es einen Weg beziehungsweise sind diese Daten überhaupt irgendwo gespeichert, um zu ermitteln wie lange mein Computer (mit diesem OS) läuft? Also ingesamte Betriebsdauer?
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Nofear23m schrieb:

    Bedenke bitte
    dass eine MessageBox den aufrufenden Thread, meist den GUI-Thread, blockiert, d.h., das Progamm steht still.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Ich finde es allgemein ziemlich hart dem User den PC runterzufahren. Dasist und sollte seine Aufgabe bleiben. Wenn der PC dann rumzickt, ist das sein Problem.
    Oder war das etwa eine Anfrage einer eurer Kunden?
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen
    @RodFromGermany Sag ich ja. Mit anderen Wort aber ok. Oder was meinst du? Ich sehe weder ein Async noch andere Threads.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Ich finde es allgemein ziemlich hart dem User den PC runterzufahren. Dasist und sollte seine Aufgabe bleiben. Wenn der PC dann rumzickt, ist das sein Problem.
    Oder war das etwa eine Anfrage einer eurer Kunden?


    Klingt hart, aber es handelt sich dabei nicht um eine "normale" Software sondern um eine Kassensoftware die fiskaltechnisch relevante Daten verarbeitet und dabei auch auf vor- und nachgeschaltete Systeme zugreift. Diese vor- und nachgeschaltenen Systeme arbeiten aber nicht einwandfrei, wenn Windows-Updates anstehen, aber Windows diese mangels Neustart nicht installieren kann. Dann befindet sich das System in einem fiskaltechnisch fragwürdigen Zustand, was mitunter dem Unternehmer viel Geld kosten könnte. Da fahre ich doch lieber den Computer zwangsweise runter als dass der Kunde eine Steuernachzahlung bekommt ...

    Es gibt Zielkunden da muss man alles vorgeben. Bei 50% meiner Kunden muss man froh sein wenn die eine Maus halten können.
    Ist womöglich eine andere Zielgruppe als Ihr bedient.

    dass eine MessageBox den aufrufenden Thread, meist den GUI-Thread, blockiert, d.h., das Progamm steht still.

    Nicht korrekt bzw. gibts da ja kein Problem damit.
    Unsere msgbox muss der Kunde ja anklicken (sonst kann er ja nicht weitermachen). Und danach wird mit Process.Start der Shutdown mit 20 Sekunden Verzögerung gestartet und die eigentliche Anwendung gleich danach beendet. Also in jedem Fall wird der Computer neu gestartet wenn der User weitermachen möchte.
    Natürlich wird nicht willkürlich mitten unter der Arbeit der Computer neu gestartet, sondern bei Aktionen die man am Tagesende macht (Tagesabschluss oder Monatsabschluss). Nachdem einer der beiden Berichte gefahren wurde, wird diese Routine aufgerufen - sonst nicht.
    Bei der Entwicklung meiner Anwendung(en) steht nicht der saubere Code im Vordergrund, sondern das Ergebnis das der Anwender schlussendlich sieht. Usability und Supportbarkeit stehen an oberster Stelle. Das spiegelt sich auch in meinen Fragen und Antworten wider.
    Gut, das mit der MessageBox ließe sich auch anders lösen: Man vertausche Zeile#8 mit #10 (MessageBox<->Process.Start) und schon startet der Absch(l)usstimer, auch wenn die MessageBox zur Seite geschoben wird. Ich hoffe mal, dass das nur ein Beispielcode war, denn die now-you-have-to-die-Variante mit End ist schon zeimlich rabiat. Und für den Fall, dass die MessageBox ignoriert werden sollte, wäre dann ein Abschluss im FormClosing-Event auch sinnvoll.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Da stimme ich Dir nicht zu. Der User soll ja wissen warum sein PC auf einmal neu startet. Und diverse User brauchen eben eine gewisse Zeit um eine Meldung am Bildschirm sinnerfasst zu lesen zu zu verstehen.

    Das "END" ist dort wo die Funktion aufgerufen wird kein Thema. Es wurden bereits in Vor-Routinen alle relevanten Daten gesichert.

    Wie gesagt kann die Messagebox nicht ignoriert werden, da bei Ignoranz ja nicht weitergearbeitet werden kann. Der User muss ja zwingend auf "OK" klicken. Und dann kann man in den meisten Fällen auch annehmen, dass die Nachricht auch gelesen wurde.

    Hier trifft wieder sehr gut meine Signatur zu ;)

    Zitat entfernt. ~Thunderbolt
    Bei der Entwicklung meiner Anwendung(en) steht nicht der saubere Code im Vordergrund, sondern das Ergebnis das der Anwender schlussendlich sieht. Usability und Supportbarkeit stehen an oberster Stelle. Das spiegelt sich auch in meinen Fragen und Antworten wider.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    dive26 schrieb:

    Hier trifft wieder sehr gut meine Signatur zu
    Ähnlich, nur haben wir das Problem mit den Updates nicht mehr. Für XP und W7 gibts keine Zwangsupdates ;)

    dive26 schrieb:

    st womöglich eine andere Zielgruppe als Ihr bedient.
    Aber ist nicht sauberer code das beste mittel im die Supportbarkeit hoch zu halten? Immerhin sind dann eventuelle Bugs schneller gefunden, wodurch man sich mehr auf die Features konzentrieren kann?
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen
    Hiermit funktioniert es sehr gut

    VB.NET-Quellcode

    1. '*** Gibt die Laufzeit zurück (2 Tage 13 Stunden 17 Minuten) ***
    2. Public Function Laufzeit() As String
    3. Try
    4. 'Laufzeit ermitteln
    5. Dim MsSinceStartup As Integer = System.Environment.TickCount
    6. ' Zeitintervall seit Hochfahren in Millisekunden
    7. Dim TimeDifference As New TimeSpan(0, 0, 0, 0, MsSinceStartup)
    8. ' Erstellung einer TimeDifference zur Umwandlung in Stunden, Minuten und Sekunden
    9. Dim zeit As String
    10. '*** ZeitString wird zusammengesetzt ***
    11. zeit = TimeDifference.Days.ToString() + " Tage " + TimeDifference.Hours.ToString + " Stunden " + TimeDifference.Minutes.ToString() + " Minuten"
    12. Return zeit
    13. Catch ex As Exception
    14. MessageBox.Show("Ihre PC- Laufzeit konnte nicht abgerufen werden ", "Hinweis!", MessageBoxButtons.OK, MessageBoxIcon.Information)
    15. End Try
    16. #Disable Warning BC42105 ' Die Funktion gibt nicht für alle Codepfade einen Wert zurück.
    17. End Function
    18. #Enable Warning BC42105 ' Die Funktion gibt nicht für alle Codepfade einen Wert zurück.

    VB.NET-Quellcode

    1. #Disable Warning BC42105 ' Die Funktion gibt nicht für alle Codepfade einen Wert zurück.
    2. End Function
    3. #Enable Warning BC42105 ' Die Funktion gibt nicht für alle Codepfade einen Wert zurück.


    Eine Warnung Ignorieren? Nich fein :(
    In diesem Fall würde ich von 0 Sekunden zurückgeben. Wenn die Zeit nicht ermittelt werden kann, muss der User das nicht wissen. Spre ich mir also die Messagebox.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    Blackn0va schrieb:

    VB.NET-Quellcode

    1. #Disable Warning BC42105 ' Die Funktion gibt nicht für alle Codepfade einen Wert zurück.
    2. End Function
    3. #Enable Warning BC42105 ' Die Funktion gibt nicht für alle Codepfade einen Wert zurück.
    Also unsauberer Code ist eine Sache, aber das ist grob Fahrlässig. Mehr noch... warum ist das nur eine Warnung und kein Fehler?
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen
    Aber ist nicht sauberer code das beste mittel im die Supportbarkeit hoch zu halten?


    mit "nicht sauber" meine ich keinen fehlerhaften Code ;-). Eher die Lesbarkeit des Codes durch Dritte ist damit gemeint. An der Software programmiere ausschließich ich und es ist auch nicht geplant dass da jemals wer anders mitprogrammieren wird. Daher muss der Code nur für mich verständlich sein. Das meinte ich unter "nicht sauber".

    Das Problem bei hier geposteten "auszugsweisen" Programmauschnitten ist, dass die Leser nicht das ganze drumherum sehen können und daher der Code "unsauber" aussieht. Das "END" (um das gehts hier ja), ist an dieser Stelle die einfachste Variante und stellt sonst rundherum nichts "böses" an ;)

    #Disable Warning BC42105 ' Die Funktion gibt nicht für alle Codepfade einen Wert zurück.


    Wie bekommt Ihr diese Warnung in den Quellcode???
    Bei mir finde ich solche Warnungen und Fehler in der "Fehlerliste" - also einem eigenen Fenster in der Entwicklungsumgebung.

    Bei der Entwicklung meiner Anwendung(en) steht nicht der saubere Code im Vordergrund, sondern das Ergebnis das der Anwender schlussendlich sieht. Usability und Supportbarkeit stehen an oberster Stelle. Das spiegelt sich auch in meinen Fragen und Antworten wider.
    Ihr vergesst das durch das herunterfahren , wichtige daten verloren gehen können , somit wenn man nachforscht sollte man rausfinden können wodurch der restart geschah & könnte juristisch vorgehen


    Da habe ich keine Bedenken. Auf unseren Geräten läuft nur unsere Kassensoftware. Und damit eben genau dort keine Daten verloren gehen ist ein regelmäßiger Windows Neustart erforderlich. Wir schreiben sogar ins Logfile wenn wir den PC manuell neu starten. Und wenn es so simpel wäre wie Sie schreiben, dann könnte man Microsoft bei jedem Windows-Update verklagen wenn er PC wegen einem Update eigenständig und unmotiviert neu startet ..

    Aber dennoch vielen Dank für den Denkanstoß. Ich nehme in die Messagebox noch den Hinweis auf alle anderen Programme zu schließen und offene Daten abzuspeichern. Dann klickt ja der User selbst zu einem von Ihm gewählten Zeitpunkt auf "OK" und löst damit selbst den Neustart aus.

    VB.NET-Quellcode

    1. MessageBox.Show("Ihr Windows PC läuft bereits länger als 5 Tage ohne Neustart. Der Computer muss aus Stabilitätsgründen neu gestartet werden!" + vbCrLf + vbCrLf + "Schließen Sie alle Anwendungen und speichern Ihre Daten ab und klicken anschließend auf 'OK' um den Computer neu zu starten!", "Computer-Neustart erforderlich!", MessageBoxButtons.OK, MessageBoxIcon.Warning)

    Bei der Entwicklung meiner Anwendung(en) steht nicht der saubere Code im Vordergrund, sondern das Ergebnis das der Anwender schlussendlich sieht. Usability und Supportbarkeit stehen an oberster Stelle. Das spiegelt sich auch in meinen Fragen und Antworten wider.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „dive26“ ()