什么是最佳的重新启动计划方式?

3
我正在尝试使用C#在WinXP上安排计划重启。目前,我编程添加了一个定期任务来在5分钟后重启,但是由于我的环境中有时间服务器,所以它并不总是有效。这意味着计划任务的时间不准确,因此我的重启不能按预期时间完成。
例如,当我添加计划重启任务时,机器时间为上午11:05,并且计划在11:10am重启。然后我加入域并重启,时间与时间服务器同步,机器更改为下午1:01。 在这种情况下,计划任务在同一天的11:10am,已经过去了。当然,它不会起作用。
那么,有人知道其他方法吗? PS:此程序在加入域之前使用,需要自动重新启动而无需用户交互。

3
也许只需保持时间同步,问题就不会发生了? - John Saunders
1
为什么要使用定时任务?直接使用“shutdown”命令不行吗? - CodeZombie
加入域之前,我无法保持时间同步。 - ikel
1
你觉得直接运行“shutdown /r /m localhost /t 300”而不是安排任务怎么样? - Matten
@Matten 需要安排重启,因为我需要第二次重启而无需用户交互。 - ikel
显示剩余2条评论
2个回答

5

通过从C#启动新进程使用内置的关闭命令:

using System;
using System.Diagnostics;

namespace ShutdownApp
{
    class ShutdownApp
    {
        static void Main(string[] args)
        {
            Process shutDown = new Process();
            int shutdownTimeInSeconds = 600; // this will shutdown in 10 minutes, use DateTime and TimeSpan functions to calculate the exact time you need    
            shutDown.StartInfo.FileName  = "shutdown.exe";
            shutDown.StartInfo.Arguments = string.Format("-r -t {0}", shutdownTimeInSeconds);

            shutDown.Start();
        }
    }
}

谢谢,我已经理解了这部分内容以及如何在C#中添加定时任务,只是时间的问题,我想。 - ikel
是的,这将重新启动,但我需要第二个重新启动,在5分钟内无需用户交互。 - ikel
从技术上讲,如果你愿意的话,你可以将你的程序添加到启动项,并使用一个参数来启动你的程序,该参数传递到下一次重启的秒数(300),这样第一次启动你的程序时没有参数,它会将自己添加到启动项,重新启动,第二次启动时,你使用那个300秒的参数,它会在5分钟后启动重启命令,并从启动项中删除自己。但是它不需要任何用户交互,正确吗? - Brian Deragon
我应该将启动注册表添加到哪里?runonce键仅在用户登录时执行。 - ikel
这里的Process对象应该被包装在一个using语句中。 - Liam
显示剩余4条评论

-1

在添加计划任务之前,您需要遵循@JohnSaunders的建议并强制进行时间同步。您可以使用NTP或SNTP来完成此操作。请参见this post


但这是针对全新的机器,加入域之前无法进行时间同步,我们能做到吗? - ikel
如果您有更新系统时钟的权限,则此方法可行 - 无论您是否加入域都可以。但考虑到@BrianDeragon的解决方案,这可能有些过度了。 - SliverNinja - MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接