您可以尝试按照 C# 代码从 NTP 服务器启用日期时间同步。
顺便说一句,我猜这是 /resync 命令号,这样我就不必启动那个肮脏的外部进程
/// <summary>Synchronizes the date time to ntp server using w32time service</summary>
/// <returns><c>true</c> if [command succeed]; otherwise, <c>false</c>.</returns>
public static bool SyncDateTime()
{
try
{
ServiceController serviceController = new ServiceController("w32time");
if (serviceController.Status != ServiceControllerStatus.Running)
{
serviceController.Start();
}
Logger.TraceInformation("w32time service is running");
Process processTime = new Process();
processTime.StartInfo.FileName = "w32tm";
processTime.StartInfo.Arguments = "/resync";
processTime.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
processTime.Start();
processTime.WaitForExit();
Logger.TraceInformation("w32time service has sync local dateTime from NTP server");
return true;
}
catch (Exception exception)
{
Logger.LogError("unable to sync date time from NTP server", exception);
return false;
}
}
详细解释:
windows有一个服务,叫做w32time,它可以在你的电脑上同步时间,首先我检查服务是否正在运行,使用ServiceController类,然后,因为我不知道哪个是resync命令号,所以我可以使用ServiceController启动命令方法,我使用 ProcessStart 在该服务上启动 dos 命令:w32tm /resync