如何在C#代码中使用w32tm重新同步时间

本文关键字:新同步 同步 时间 w32tm 代码 | 更新日期: 2023-09-27 17:57:32

请给我一个在C#.net中使用w32tm.exe实现时间同步的工作代码。我已经尝试过了。代码如下所示。

    System.Diagnostics.Process p;
    string output;
    p = new System.Diagnostics.Process();
    p.StartInfo = procStartInfo;
    p.StartInfo.FileName = "w32tm";
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.Arguments = " /resync /computer:xxxxx977";
    p.Start();
    p.WaitForExit();
    output = p.StandardOutput.ReadLine().ToString();
    MessageBox.Show(output);

但是我得到了以下错误找不到指定的模块。(0x8007007E)。我的需求还想重定向成功消息的标准输出。

如何在C#代码中使用w32tm重新同步时间

您可以尝试以下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

当.Net运行时JIT您将要进入的方法时,会发生错误,因为它找不到该方法使用的类型之一。

你不能介入的方法到底做了什么,它使用了什么类型/方法?

参考此链接

因此,请检查您尝试加载的任何项目是否在文件夹中。