私のプログラムは、マシンの SystemDate を変更できる必要があります。見回した後、このコードを見つけて実装しましたが、日付はまったく変更されていないようです。それが実行されている VM は時刻同期がオフになっているため、問題がそこにあるわけではないことはわかっています。私は小さな間違いを犯しましたか、それともシステムの日付を変更する簡単な方法はありますか?
[StructLayout(LayoutKind.Sequential)]
private struct SYSTEMTIME
{
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
}
// Return Type: BOOL
[System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "SetSystemTime")]
[return:System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
private static extern bool SetSystemTime([InAttribute()] ref SYSTEMTIME lpSystemTime);
public bool SetSystemDateTime(DateTime newDateTime)
{
bool result = false;
try
{
newDateTime = newDateTime.ToUniversalTime();
SYSTEMTIME sysTime = new SYSTEMTIME()
{ wYear = (short)newDateTime.Year /* must be short */,
wMonth = (short)newDateTime.Month,
wDayOfWeek = (short)newDateTime.DayOfWeek,
wDay = (short)newDateTime.Day,
wHour = (short)newDateTime.Hour,
wMinute = (short)newDateTime.Minute,
wSecond = (short)newDateTime.Second,
wMilliseconds = (short)newDateTime.Millisecond };
result = SetSystemTime(ref sysTime);
}
catch (Exception)
{
result = false;
}
return result;
}