2016-05-01 10 views
2
Sub change_the_time(ByVal NewDateTime As DateTime) 
     ' 
     Dim NewDateTime2 As DateTime 
     ' 
     NewDateTime2 = #5/1/2016 5:52:15 PM# ' try setting the time to this 
     ' 
     'set the system date and time to this date and time - throw an exception if it can't 
     Try 
      TimeOfDay = NewDateTime2 
     Catch ex As Exception 
      MessageBox.Show("Could not set time. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop) 
     End Try 
End Sub 

Hallo. Neu auf der Seite so hoffentlich folge ich den Regeln :-) Meine Fragen ist wie kann ich die Systemzeit erfolgreich ändern? Der obige Code, den ich auf dieser Seite gefunden habe (sowie viele Informationen zu anderen Teilen meines Projekts - vielen Dank!) Und es gibt keine Fehler, aber es löst immer eine Ausnahme aus. Ich laufe als Admin und ich habe versucht, die UAC zu ändern, und ich kann immer noch nicht die Zeit ändern. Ich habe gelesen, dass ich die Berechtigung SE_SYSTEMTIME_NAME haben muss, aber ich habe diese Einstellung so, dass alle Benutzer (dh ich) das Recht haben, immer noch nichts. Die MS-Referenz here bietet nicht viel Einblick. Ich vermute, dass es ein Problem mit Privilegien ist, aber ich kann nicht sehen, wie ich das setze, was ich brauche. Was muss ich tun, damit meine Anwendung die Systemzeit auf einen Wert ändern kann?Systemzeit dynamisch ändern win7

Weitere Informationen ... Es gibt eine andere Frage in die gleiche Richtung, aber es ist C# nicht Vb und ich habe etwas ähnliches zu diesem Code, der unten ist, versucht. Noch

Private Sub change_the_time2(ByRef NewDateTime As DateTime) 
    Dim d As DateTime 
    d = #6/10/2011# ' try setting the date to this before using NewDateTime 
    Dim worked As Boolean 
    ' 
    Try 
     worked = setlocaltime(d) 
     MsgBox(" 1. Did it work " & worked) 
    Catch ex As Exception 
     MsgBox(" 2. Did it work " & worked) 
    End Try 
End Sub 

<DllImport("kernel32.dll", setLastError:=True)> _ 
Private Shared Function setlocaltime(ByRef time As System.DateTime) As Boolean 

End Function 
+0

Was ist die Ausnahme? –

+0

Hallo SuperPeanut, "Konnte Zeit nicht einstellen. Unzureichende Sicherheitsberechtigungen, um die Systemzeit einzustellen" –

+0

Mögliches Duplikat von [Systemdatum programmgesteuert ändern] (http://stackoverflow.com/questions/650849/change-system-date-programmatically) –

Antwort

1

Dies ist im Wesentlichen ein Duplikat this question wie in den Kommentaren erwähnt. Aber für VB.NET zu klären, wie C# oposed, je eine der Antworten in dieser Frage:

Unter Windows Vista, 7, 8 OS dies eine UAC-Eingabeaufforderung, um erfordern erhalten die erforderlichen Administratorrechte um die SetSystemTime-Funktion erfolgreich auszuführen.

Der Grund dafür ist, dass der Aufrufprozess die Berechtigung SE_SYSTEMTIME_NAME benötigt. Die SetSystemTime-Funktion erwartet eine SYSTEMTIME-Struktur in koordinierter Weltzeit (UTC). Es wird nicht wie sonst gewünscht arbeiten.

Je nachdem, wo/wie Sie Ihre Datetime-Werte werden immer, vielleicht wäre es am besten, es sicher zu spielen und ToUniversalTime() verwenden, bevor die entsprechenden Werte in der SYSTEM Struktur einstellen.

Code-Beispiel (modifiziert für VB.NET):

Dim tempDateTime As DateTime = GetDateTimeFromSomeService() 
Dim dateTime As DateTime = tempDateTime.ToUniversalTime() 

Dim st As SYSTEMTIME 
'All of these must be short 
st.wYear = dateTime.Year.ToInt16() 
st.wMonth = dateTime.Month.ToInt16() 
st.wDay = dateTime.Day.ToInt16() 
st.wHour = dateTime.Hour.ToInt16() 
st.wMinute = dateTime.Minute.ToInt16() 
st.wSecond = dateTime.Second.ToInt16() 

// invoke the SetSystemTime method now 
SetSystemTime(ByRef st) 

Ja, benötigen Sie Administratorrechte.

+0

Vielen Dank! Der Fehler war nicht mit dem Code, obwohl ich danke Ihnen für den Code oben, da es genauer ist als alles, was ich hatte. Der Code, den ich bei der Ausführung als Administrator bearbeitet habe. Ich dachte, ich würde * den Code als Admin laufen lassen, aber eine * richtige * Überprüfung zeigte mir etwas anderes. Danke nochmal. –