diff --git a/RTCSync.cli/Options/SetTimeOption.cs b/RTCSync.cli/Options/SetTimeOption.cs
index 828b49b..1ce95c7 100644
--- a/RTCSync.cli/Options/SetTimeOption.cs
+++ b/RTCSync.cli/Options/SetTimeOption.cs
@@ -53,7 +53,7 @@ public class SetTimeOption : IOption
for (var i = 0; i < 3; i++)
{
// FIXME: вызывает падение на windows 7
- var dt = DateTime.Now;
+ var dt = WindowsTimeUtils.Now();
DeviceWriters.SetTime(device, dt);
}
}
diff --git a/RTCSync.cli/RTCSync.cli.csproj b/RTCSync.cli/RTCSync.cli.csproj
index 609d0d9..56c88c3 100644
--- a/RTCSync.cli/RTCSync.cli.csproj
+++ b/RTCSync.cli/RTCSync.cli.csproj
@@ -7,12 +7,17 @@
enable
enable
true
+ link
+ false
true
RTCSync
+ Size
+ true
+ Speed
-
+
diff --git a/RTCSync.cli/Utils/WindowsTimeUtils.cs b/RTCSync.cli/Utils/WindowsTimeUtils.cs
index c7b35e8..d48c650 100644
--- a/RTCSync.cli/Utils/WindowsTimeUtils.cs
+++ b/RTCSync.cli/Utils/WindowsTimeUtils.cs
@@ -7,20 +7,39 @@ public abstract class WindowsTimeUtils
// c# datetime set
[DllImport("kernel32.dll")]
public static extern bool SetSystemTime(ref SystemTime time);
-
+
[DllImport("kernel32.dll")]
public static extern void GetSystemTime(ref SystemTime time);
-
+
[StructLayout(LayoutKind.Sequential)]
- public struct SystemTime(DateTime dt)
+ public struct SystemTime
{
- public ushort Year = (ushort)dt.Year;
- public ushort Month = (ushort)dt.Month;
- public ushort DayOfWeek = (ushort)dt.DayOfWeek;
- public ushort Day = (ushort)dt.Day;
- public ushort Hour = (ushort)dt.Hour;
- public ushort Minute = (ushort)dt.Minute;
- public ushort Second = (ushort)dt.Second;
- public ushort Milliseconds = (ushort)dt.Millisecond;
+ public ushort Year, Month, DayOfWeek, Day;
+ public ushort Hour, Minute, Second, Milliseconds;
+
+ public SystemTime() { }
+
+ public SystemTime(DateTime dt)
+ {
+ Year = (ushort)dt.Year;
+ Month = (ushort)dt.Month;
+ DayOfWeek = (ushort)dt.DayOfWeek;
+ Day = (ushort)dt.Day;
+ Hour = (ushort)dt.Hour;
+ Minute = (ushort)dt.Minute;
+ Second = (ushort)dt.Second;
+ Milliseconds = (ushort)dt.Millisecond;
+ }
+ }
+
+ // Фикс для Windows 7 SP1 без обновлений
+ // DataTime.Now использует слишком новый API
+ public static DateTime Now()
+ {
+ var st = new SystemTime();
+ GetSystemTime(ref st);
+ return new DateTime(st.Year, st.Month, st.Day,
+ st.Hour, st.Minute, st.Second, st.Milliseconds,
+ DateTimeKind.Utc).ToLocalTime();
}
}
\ No newline at end of file