Einzelnen Beitrag anzeigen

RonnyBausA

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

SetSystemTime unter Windows 7

  Alt 29. Nov 2011, 16: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