【问题标题】:Schedule task in Windows Task Scheduler C# [duplicate]在 Windows 任务计划程序 C# 中计划任务 [重复]
【发布时间】:2012-04-07 07:24:26
【问题描述】:

我的应用程序需要在每天午夜重新启动。根据我的说法,对于这项工作,任务调度程序将是理想的选择,但我无法找到如何在 C# 中使用任务调度程序 API(无需使用外部库)

从任务计划程序启动应用程序完成后,我还想要建议如何在特定时间自动关闭应用程序(即使该特定时间的应用程序可能没有响应、显示一些错误消息框或由于以下原因而无法运行)有问题)

【问题讨论】:

    标签: c# scheduled-tasks


    【解决方案1】:

    好吧,我想你不知道schtasks 命令。
    您只需打开命令提示符并键入 schtasks /? 即可查看可用选项。
    这里需要的是/create。当然这个选项需要一系列参数来配置你的计划任务。但最后你可以解决所有调用:

    Process.Start("schtasks", commandParams);
    

    对于关闭进程部分,我使用了一个名为 pskill 的小实用程序,该实用程序位于 Microsoft 的 Mark Russinovich 的 Sysinternals suite 中。这也可以在设置为计划任务的批处理文件中调用。

    编辑:从 psshutdown 更改为 pskill(您只需要关闭您的应用程序对吗?)

    【讨论】:

    • 感谢您的回复。我尝试先通过命令行手动设置此任务,在以管理员身份运行cmd 后,我能够使用消息Successfully created the task 创建此任务schtasks /create /tn "MyApp" /tr c:\app.exe /sc on start。显然,我的应用程序需要管理员权限才能运行,当我重新启动计算机时,该应用程序没有运行。我签入了 schticks /query,MyApp 状态显示为“无法启动”。对此有何建议?
    • 我不认为这是因为这个管理员权限。我尝试了另一个不需要管理员权限的简单应用程序,但是当我在重新启动后签入 schtasks /query 时,它给出了“无法启动”状态。
    • 我将任务更改为登录,现在运行良好。 :-)
    • @Steve 为什么不直接使用Process.Kill
    【解决方案2】:

    我建议你编写一个服务来处理这个问题。另外,为什么它需要重启

    如果你必须使用任务调度器,试试这样:

    schtasks /create /SC DAILY /TN AppName /TR AppExecutablePath /ST 0
    0:00 /ET TIMEFORENDTASK
    

    您可以简单地在批处理脚本中键入并在用户安装应用程序时运行批处理脚本,然后将其放入卸载批处理脚本中:

    schtasks /delete /TN AppName
    

    【讨论】:

    • 感谢您的回复。我尝试首先使用 schtasks` 命令通过命令行手动设置此任务,在以管理员身份运行 cmd 后,我能够创建此任务 schtasks /create /tn "MyApp" /tr c:\app.exe /sc on从消息成功创建任务开始。显然,我的应用程序需要管理员权限才能运行,当我重新启动计算机时,该应用程序没有运行。我签入了 schticks /query,MyApp 状态显示为“无法启动”。对此有何建议?
    • 可能需要传递管理员的用户名和密码。查看标志 /U /P 和 /RU
    • 我不认为这是因为这个管理员权限。我尝试了另一个不需要管理员权限的简单应用程序,但是当我在重新启动后签入 schtasks /query 时,它给出了“无法启动”状态。
    • @user1240679: 是ONSTART 而不是ON START... 因为这是在您的PC 上,我建议您使用GUI,这样可以避免拼写错误或其他错误。只需在命令提示符下键入start taskschd.msc 并使用创建任务向导。