AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

SetSystemTime unter Windows 7

Ein Thema von RonnyBausA · begonnen am 29. Nov 2011 · letzter Beitrag vom 9. Dez 2011
Antwort Antwort
RonnyBausA

Registriert seit: 29. Nov 2011
10 Beiträge
 
Delphi XE2 Professional
 
#1

SetSystemTime unter Windows 7

  Alt 29. Nov 2011, 15:03
Hallo zusammen,
jetzt bitte nicht gleich stöhnen, dass diese Frage zum x-tausendsten Mal kommt. Ich programmiere übrigens mit Delphi 5 Pro.

Ich möchte mal kurz meine Problematik erläutern:
Ich weiß, dass ich die Systemzeit nur mit Administratorrechten ändern kann und das ist auch gut so. Erst mal zum Gesamtsystem. Es geht um ein digitales Steuerungssystem welches permanent über eine serielle Schnittstelle mit einem (meist Windows 7) PC verbunden ist. Auf diesem PC läuft eine kleine Anwendung in der Taskbar, welche die Kommunikation über die serielle Schnittstelle macht. Diese Anwendung kommuniziert mit mehreren anderen lokalen Anwendungen per Windows Messages. Das sind z.B. Anwendungen für Protokollierung oder Konfiguration dieses digitalen Systems. Alles läuft soweit unter einem normalen Benutzeraccount ohne Adminrechte wie es sich gehört. Der jeweils verwendete PC ist meistens alleine und ohne Netzwerkverbindung nur für dieses digitale System da und läuft 24h/7Tage. Die PC Anwendungen werden alle beim Windows Start per Autostart geladen für den Fall, das es trotz USV mal einen Aussetzer gibt. Das heißt auch, dass vor diesem PC nur in seltenen Fällen mal ein Benutzer sitzt.

Nun zu meinem Problem. Das digitale System verfügt über eine eigene DCF-Uhr. Diese Uhrzeitinformation gibt sie auch per serieller Schnittstelle an die Anwendung in der Taskbar. Nun wäre es schön, wenn diese Anwendung eben auch die PC-Zeit entsprechend setzen könnte, damit die Zeiten des digitalen Systems und des PCs synchron sind, gerade auch wegen der Fehlerprotokollierung. Da die Anwendung unter einem normalen Benutzeraccount läuft hat sie nicht das Recht die PC-Zeit zu ändern. Eine kleine Zusatzanwendung mit Adminrechten zu starten fällt denke ich ebenfalls aus, da dann ja die UAC nach Erlaubnis fragen würde. Da aber kein Benutzer vor dem PC sitzt wird dies scheitern. Ich hab auch schon mal testweise die Anwendung in der Taskbar als Administrator laufen lassen. Dann kann sie zwar die Uhrzeit ändern (wenn ich per Token das entsprechende Privileg anfordere), aber kann dann nicht mehr per Windows Messages mit den anderen Anwendungen kommunizieren, da diese unter dem normalen Benutzeraccount laufen.

Nach vielem Googlen tauchte öfter die Möglichkeit mit einem Windows Dienst auf. Dieser könnte ja mit dem lokalen Systemkonto theoretisch in der Lage sein, die Uhrzeit zu ändern. Nur wie sage ich dann z.B. dem Dienst "Hey, änder mal die Uhrzeit auf xxx"? Zumal ja die Anwendung und der Dienst unter verschiedenen Benutzerkonten arbeiten.

Hat irgendjemand eine gute und einfache Idee wie man das realisieren könnte? Es muss auch nicht unbedingt über einen Dienst gehen. Wenn jemand eine bessere Idee hat, nur her damit. Wie gesagt darf zu diesem Zeitpunkt keine Windows Sicherheitsabfrage oder ähnliches kommen, da kein Benutzer vorm PC sitzt. Andererseits möchte ich auch Windows-konform bleiben und nicht alle Schutzmechanismen aushebeln müssen.

Bin gespannt auf Eure Vorschläge. Bei komplizierteren Vorschlägen wäre ich auch dankbar für ein paar Codeschnipsel, da ich bisher eben nur die "normalen" Sachen programmiert habe.
Ronny B.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.221 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: SetSystemTime unter Windows 7

  Alt 29. Nov 2011, 15:09
Du hast schon das Schlagwort gebracht: Windows Dienst.

Dieser frägt auch deine DCF-Uhr ab so das du auch keine Kommunikation zwischen "normaler" App und Dienste App (welche z.B. über Named Pipes gehen würde) nötig wäre.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
RonnyBausA

Registriert seit: 29. Nov 2011
10 Beiträge
 
Delphi XE2 Professional
 
#3

AW: SetSystemTime unter Windows 7

  Alt 29. Nov 2011, 15:17
Vielen Dank für die schnelle Antwort.

...Dieser frägt auch deine DCF-Uhr ab...
Die DCF-Uhr hängt nicht am PC sondern an dem externen digitalen Steuerungssystem. Dieses übermittelt in regelmäßigen Abständen die Uhrzeitinformation per serieller Schnittstelle an meine kleine Taskbar-Anwendung. Die DCF-Uhr muss auch extern bleiben, da das digitale Steuerungssystem aus einem komplexen Verbund mehrerer Systeme besteht.

Ich muss also die Daten an den Dienst übergeben, damit der die Uhrzeit setzen kann.

viele Grüße
Ronny B.

Edit: Ich hab auch noch nie mit Pipes gearbeitet, aber funktioniert das den auch von einer Anwendung mit normalem Benutzeraccount zu einem Dienst mit lokalem Systemaccount?

Geändert von RonnyBausA (29. Nov 2011 um 15:19 Uhr) Grund: Text angefügt
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.221 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SetSystemTime unter Windows 7

  Alt 29. Nov 2011, 15:26
Die DCF-Uhr hängt nicht am PC sondern an dem externen digitalen Steuerungssystem. Dieses übermittelt in regelmäßigen Abständen die Uhrzeitinformation per serieller Schnittstelle an meine kleine Taskbar-Anwendung. Die DCF-Uhr muss auch extern bleiben, da das digitale Steuerungssystem aus einem komplexen Verbund mehrerer Systeme besteht.
Auch der Dienst kann diese externen Info per Serielle Schnittstelle abfragen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
RonnyBausA

Registriert seit: 29. Nov 2011
10 Beiträge
 
Delphi XE2 Professional
 
#5

AW: SetSystemTime unter Windows 7

  Alt 29. Nov 2011, 15:37
Aber der Dienst und meine Taskbar Anwendung können ja nicht gleichzeitig auf ein und den selben COM-Port zugreifen. Und die Taskbar-Anwendung und deren benutzter COM-Port kann ich nicht schließen, da auf der seriellen Schnittstelle ein permanenter Datenverkehr mit dem digitalen System läuft. Die Uhrzeitinformation ist nicht das einzige, was über die serielle Schnittstelle kommt. Der Rest wird halt von den anderen Anwendungen verarbeitet. Die Taskbar-Anwendung händelt sozusagen das Datenprotokoll auf der seriellen Schnittstelle. Jedes fertige Datenpaket wird dann von dieser Taskbar-Anwendung aufbereitet und an die entsprechende und dafür zuständige Anwendung per Windows Message verteilt. Eine Unterbrechung des Datenverkehrs würde auch zu einer Fehlermeldung des digitalen Systems führen.

Viele Grüße
Ronny B.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.221 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: SetSystemTime unter Windows 7

  Alt 29. Nov 2011, 15:39
... Die Uhrzeitinformation ist nicht das einzige, was über die serielle Schnittstelle kommt. Der Rest wird halt von den anderen Anwendungen verarbeitet. ...
Ok. Dann brauchst du eine sonstige Interprozesskommunikation wie Named Pipes oder simple ein TCP/IP-Port über den du das schickst.
Wenn du hier im Forum nach "Named Pipe Dienst" suchst solltest du einiges an Beispiel(code) finden
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz