Benutzer mit den meisten Antworten
Systemzeit unter Windows 8 setzten

Frage
-
Hallo,
ich benutze folgenden Code um die Systemzeit zu setzten.
public static void SetSystemTimeLocal(DateTime dt) { SetSystemTime(dt.ToUniversalTime()); } //-------------------------------------------------------------------------------- /// <summary> /// API Call SetSystemTime /// </summary> //-------------------------------------------------------------------------------- struct str_Time { public short Jahr; public short Monat; public short TagInDerWoche; public short Tag; public short Stunde; public short Minute; public short Sekunde; public short Millisekunde; } [DllImport("kernel32.dll", SetLastError = true)] static extern bool SetSystemTime(ref str_Time neueZeit); public static void SetSystemTime(DateTime NeueZeit) { str_Time Zeit = new str_Time(); Zeit.Jahr = (short)NeueZeit.Year; Zeit.Monat = (short)NeueZeit.Month; Zeit.TagInDerWoche = (short)NeueZeit.DayOfWeek; Zeit.Tag = (short)NeueZeit.Day; Zeit.Stunde = (short)NeueZeit.Hour; Zeit.Minute = (short)NeueZeit.Minute; Zeit.Sekunde = (short)NeueZeit.Second; Zeit.Millisekunde = (short)NeueZeit.Millisecond; SetSystemTime(ref Zeit); }
Unter Win Xp und Win 7 hat das auch noch super funktioniert, leider unter windows 8 nicht mehr. SetSystemTime liefert mir hier immer false zurück. Irgendwelche Ideen woran das liegen könnte bzw. wie kann ich die Systemzeit unter Win8 sonst setzten?
MfG Manu
Antworten
-
Hallo,
ich habe deinen Code mal bei mir unter Windows 8 Pro x64 getestet. Unter .NET 2.0, 3.5 und 4.5 funktioniert er problemlos. Getestet als AnyCPU, x86 und x64.
SetSystemTimeLocal(new DateTime(1996, 3, 13, 18, 50, 0));
Eine andere Möglichkeit das ganze zu realisieren kenne ich auch nicht.
Startest du das Programm als Normal-Nutzer oder als Admin? Eventuell fehlen dir auch dir Rechte.Welche Architektur (x64/x86/AnyCPU) haben denn das Win8 und dein Programm welches .NET Framework verwendest du? Welche exakte Windows-Version nutzt du denn (Pro, ...)?
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.
- Bearbeitet Tom Lambert (Koopakiller)Moderator Mittwoch, 9. Oktober 2013 14:25
- Als Antwort markiert blenet Mittwoch, 9. Oktober 2013 15:16
Alle Antworten
-
Hallo,
ich habe deinen Code mal bei mir unter Windows 8 Pro x64 getestet. Unter .NET 2.0, 3.5 und 4.5 funktioniert er problemlos. Getestet als AnyCPU, x86 und x64.
SetSystemTimeLocal(new DateTime(1996, 3, 13, 18, 50, 0));
Eine andere Möglichkeit das ganze zu realisieren kenne ich auch nicht.
Startest du das Programm als Normal-Nutzer oder als Admin? Eventuell fehlen dir auch dir Rechte.Welche Architektur (x64/x86/AnyCPU) haben denn das Win8 und dein Programm welches .NET Framework verwendest du? Welche exakte Windows-Version nutzt du denn (Pro, ...)?
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.
- Bearbeitet Tom Lambert (Koopakiller)Moderator Mittwoch, 9. Oktober 2013 14:25
- Als Antwort markiert blenet Mittwoch, 9. Oktober 2013 15:16
-
Hallo Manu,
siehe http://stackoverflow.com/questions/12076140/cant-set-clock-using-setsystemtime-on-windows-8
und auch lesen Important change to UAC when disabled with process integrity in Windows 8
Da es sich um eine privilegierte Operation handelt und das "Verbiegen" Programme und auch die Kerberos Authentifizierung aus dem Tritt bringen kann, sollte man auf das direkte Setzen der Systemzeit aus einem Programm verzichten und es über einen Zeit-Server erledigen, was direkt in Windows eingebaut ist.
Gruß Elmar
-
Danke für die Erklärung, das mit dem Zeitserver funktioniert bei mir denke ich nicht, da ich mich auf ein bestimmtes Zeitmessgerät synchronisieren muss, welches mir die Zeitstempel über eine serielle Schnittstelle schickt, und da ich gleich mehrere Programme am gleichen Rechner darauf synchronisieren muss hat sich die Variante mit der Systemzeit als einfachste erwiesen.
MfG
-
Hallo Manu,
solange der Rechner für nichts anderes genutzt wird mag das gehen, ansonsten sollte man eher eine "eigene Zeit" im Programm verwalten (oder das Zeitmessgerät mit der Weltzeit synchronisieren ;)
Wenn Du die Systemzeit einstellen willst, so wirst Du nicht darum kommen, mit erhöhten Rechten zu arbeiten, d.h. im Manifest requireAdministrator hinterlegen:
http://stackoverflow.com/questions/1781734/run-net-application-as-administratorGruß Elmar