Uhrzeit von mehreren Rechnern im Windows Netzwerk synchronisieren (nicht per TCP)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von Exarous.

    Petaod, es geht nicht darum wie ich den Timestamp erzeuge, sondern dass mehrere Rechner im Netzwerk eine identische Uhrzeit haben.

    Aus der Datenbank (Access-MDB-File) wie oben beschrieben bekomm ich nicht die Uhrzeit des Rechners wo die Datenbank liegt, sondern des Rechners der auf die Datenbank zugreift. Das ist das Problem. Das habe ich bereits ausprobiert. Ist also nicht die Lösung.

    Es geht mir darum um zu verhindern, dass ein Rechner im Netzwerk extrem von der Uhrzeit der anderen Rechner abweicht. Da in den meisten Fällen eine leere BIOS-Stützbatterie für extreme Zeitabweichungen verantwortlich ist, geht in den meisten Fällen die Zeit des betroffenen Rechners nach.

    Ich habe die Lösung meines Problems schon gefunden, obwohl es nicht meine Eingangsfrage mit exakter Zeitsynchronisation klärt.


    Andy, das sollten sie. Aber ich kanns nicht erzwingen. Wenn ein Anwender
    nicht darauf achtet, dass die Uhrzeiten seiner Rechner identisch sind,
    dann hat der Anwender probleme mit der Finanz, da die Buchungszeilen in
    der Datenbank mit falschen Zeitstempeln erstellt wurden.

    Beispiel (vereinfacht):

    ID / Zeit / Rechner / Produkt
    1 10:30 KasseA 1 Cola
    2 10:32 KasseA 2 Schnitzel
    3 08:15 KasseB 1 Pizza
    4 10:33 KasseA 1 Weinschorle

    KasseB geht über 2 Stunden nach. So darf das nicht sein.
    Lösung:
    Ich prüfe beim Start der KasseB ob das lokale Computerdatum von KasseB
    niedriger ist als das Datum des letzten Buchungseintrages in der
    Datenbank. Dann kann ich eine entsprechende Meldung ausgeben. So kann
    ich zwar die Uhrzeit der Rechner nicht synchronisieren, aber bei
    extremen Abweichungen fällt es sofort auf.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

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

    Ich gehe mal davon aus, du hast eine Server und eine Client Anwendung. Warum packst du nicht die Serveranwendung mit einem Installations Assistenten, zusammen mit einem NTP-Server. Wenn der Kunde nun den Server Installiert, wird Automatisch der NTP-Server installiert. Du kannst in den Wizzard Programmen auch einstellen, dass eine Anwendung Startet sobald man Windows Startet.

    Hier mal ein solches Programm: http://www.jrsoftware.org/isinfo.php

    ------

    Den Server für die Uhrzeit kannst ja ganz einfach selbst schreiben mit den Sockets. Habe leider kein VS hier, sonst würde ich dir einen Beispielcode schreiben.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Also es handelt sich um einen Server im lokalen Netz auf dessen Netzlaufwerk eine Access DB liegt auf die du von VB.NET Clients aus drauf zugreifst? Ist das so korrekt?

    Kannst du am Client in der CMD eingeben:

    net time \\servername

    und schauen was zurückgegeben wird? Dann ginge es mit der API NetRemoteTOD.
    Alternativ kannst du WMI verwenden, um die Zeit am Server abzufragen. Beides erfordert allerdings, das keine Firewall zwischen Server und Client existiert die alle Ports blockiert und das am Server der RPC Dienst läuft.

    Das ist meine Signatur und sie wird wunderbar sein!

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

    Danke für die Tipps. Jedoch ist alles nicht machbar. "Server<>Client" Anwendung ist etwas übertrieben beschrieben. Eine Kasse "spielt" den Server und die Clients greifen auf einen freigegebenen Ordner und auf die darin befindlichen Daten und Datenbanken zu.

    Meine Software ist so geschrieben, dass diese jeder User mit nur geringen Computerkenntnissen installieren kann. Alle oben beschriebenen Wege wären ein Mehraufwand den ich meinen Kunden nicht zumuten möchte - würden auch die wenigsten hinbekommen. Das ist mein Service. Andererseits muss die Software auch dann "richtig rechnen", wenn die Uhrzeit (warum auch immer) auf einem Rechner falsch ist. Und hier sehe ich nicht den Kunden in der Pflicht, sondern mich als Programmierer der Software. Meine Kunden verlassen sich darauf, dass meine Software mit solchen Widrigkeiten umgehen kann. Ich erwarte mir das auch ;)

    Danke Euch. Die Variante die ich meinen Kunden zumuten kann und die das ursprüngliche Problem löst (nicht stringente Zeit-Buchungseinträge in der Datenbank) habe ich damit gefunden.

    Technische Möglichkeiten gibt es viele, aber es muss auch durchführungstechnisch für die Kunden passen.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Die 2 von mir genannten Dinge kannst du in VB.nET in deiner Anwendung einbauen. In einer "normalen" Umgebung funktioniert beides. Es müsste schon jemand bewusst den RPC Dienst abdrehen oder die Ports dafür blocken.

    http://www.pinvoke.net/default.aspx/netapi32.netremotetod

    Ein weiterer Ansatz wäre die Zeit immer mit der aus dem Internet abzugleichen:
    stackoverflow.com/questions/64…atetime-from-the-internet

    Aber wenn du eine für dich gute Lösung hast, ist es ja eh wurst.^^
    Das ist meine Signatur und sie wird wunderbar sein!
    Um die Uhrzeit von zwei Rechnern zu vergleichen brauche ich ja kein Internet. Nur eine Verbindung zwischen den beiden Rechnern. Netzwerkverbindung ist nicht gleich Internetverbindung ;)

    Habs aber schon auf meine weise gelöst wie oben beschrieben.

    Das Problem ist ja auch (hatte ich z.B. heute von einem Kunden berichtet bekommen). Kunde hat Windows 10 und mitten unter dem Arbeiten hat sich auf einmal die Windows-Uhrzeit um 2 Stunden verstellt. Laut Kunde hat niemand manuell verstellt und automatische Internet-Zeitsynchronisation war auch aktiv. Sowas ist auch schwer zu handhaben.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at