-1

请给我一个在 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)。我的要求还想重定向成功消息的标准输出。

4

2 回答 2

1

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

于 2014-12-16T16:35:31.500 回答
0

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

您无法进入的方法究竟是做什么的,它使用了哪些类型/方法?

参考这个链接

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

于 2013-02-05T04:36:26.770 回答