Ich kann SetSystemTime unter Windows Vista nicht mit C # mit Interop (P / Invoke) zum Laufen bringen

Es fällt mir schwer, SetSystemTime in meinem C # -Code zum Laufen zu bringen. SetSystemtime ist eine kernel32.dll-Funktion. Ich benutze P / Invoke (Interop), um es aufzurufen. SetSystemtime gibt false zurück und der Fehler lautet "Invalid Parameter". Ich habe den Code unten gepostet. Ich betone, dass GetSystemTime einwandfrei funktioniert. Ich habe dies unter Vista und Windows 7 getestet. Aufgrund einiger Newsgroup-Beiträge habe ich die Benutzerkontensteuerung deaktiviert. Kein Unterschied. Ich habe nach diesem Problem gesucht. Ich habe diesen Link gefunden:http://groups.google.com.tw/group/microsoft.public.dotnet.framework.interop/browse_thread/thread/805fa8603b00c267

wo das Problem gemeldet wird, aber keine Lösung gefunden zu werden scheint. Beachten Sie, dass die Benutzerkontensteuerung ebenfalls erwähnt wird, aber ich bin mir nicht sicher, ob dies das Problem ist. Beachten Sie auch, dass dieser Herr keinen tatsächlichen Win32Error bekommt.

Kann jemand meinen Code unter XP ausprobieren?Kann mir jemand sagen, was ich falsch mache und wie ich das beheben kann. Wenn die Antwort darin besteht, die Berechtigungseinstellungen programmgesteuert zu ändern, benötige ich ein Beispiel. Ich hätte gedacht, dass das Ausschalten der Benutzerkontensteuerung dies abdecken sollte.Ich muss diese spezielle Methode (SetSystemTime) nicht verwenden. Ich versuche nur, eine "Zeitverschiebung" einzuführen, um etwas zu belasten. Wenn es einen anderen Weg gibt, sag es mir bitte. Ehrlich gesagt bin ich überrascht, dass ich Interop verwenden muss, um die Systemzeit zu ändern. Ich hätte gedacht, es gibt eine .NET-Methode.

Vielen Dank für jede Hilfe oder Ideen. Andrew

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace SystemTimeInteropTest
{
    class Program
    {
        #region ClockDriftSetup
        [StructLayout(LayoutKind.Sequential)]
        public struct SystemTime
        {
            [MarshalAs(UnmanagedType.U2)]
            public short Year;
            [MarshalAs(UnmanagedType.U2)]
            public short Month;
            [MarshalAs(UnmanagedType.U2)]
            public short DayOfWeek;
            [MarshalAs(UnmanagedType.U2)]
            public short Day;
            [MarshalAs(UnmanagedType.U2)]
            public short Hour;
            [MarshalAs(UnmanagedType.U2)]
            public short Minute;
            [MarshalAs(UnmanagedType.U2)]
            public short Second;
            [MarshalAs(UnmanagedType.U2)]
            public short Milliseconds;
        }

        [DllImport("kernel32.dll")]
        public static extern void GetLocalTime(
        out SystemTime systemTime);

        [DllImport("kernel32.dll")]
        public static extern void GetSystemTime(
        out SystemTime systemTime);

        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool SetSystemTime(
        ref SystemTime systemTime);

        //[DllImport("kernel32.dll", SetLastError = true)]
        //public static extern bool SetLocalTime(
        //ref SystemTime systemTime);
        [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "SetLocalTime")]
        [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
        public static extern bool SetLocalTime([InAttribute()] ref SystemTime lpSystemTime);



        #endregion ClockDriftSetup
        static void Main(string[] args)
        {
            try
            {
            SystemTime sysTime;
             GetSystemTime(out sysTime);
                sysTime.Milliseconds += (short)80;
                sysTime.Second += (short)3000;
                bool bResult = SetSystemTime(ref sysTime);

                if (bResult == false)
                    throw new System.ComponentModel.Win32Exception();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Drift Error: " + ex.Message);
            }
        }
    }
}

Antworten auf die Frage(0)

Ihre Antwort auf die Frage