3

我正在尝试查看是否可以从 asp.net-mvc 站点管理一堆 Windows 计划任务(设置新任务、更新现有任务的频率等),因为我们希望允许非技术用户更新此信息(所以我们希望避免人们必须直接登录网络服务器等)

我看到您通常可以从 C# 执行此操作(下面的链接),但不确定可以通过 Web 应用程序进行管理的权利等。

如果无法通过网络实现,是否还有其他“远程”选项,这样人们就可以在不进入特定盒子的情况下做到这一点?

4

2 回答 2

11

是的,您可以,只需使用可以在 C:\Windows\SysWOW64\ 中找到的 taskschd.dll 只需将其引用到您的 Web 应用程序并像这样使用它

using TaskScheduler;

namespace Test
{
    public class Class1
    {
        public void Test()
        {
            var taskService = new TaskScheduler.TaskScheduler();
            taskService.Connect();

            var rootFolder = taskService.GetFolder(@"\");

            var registeredTasks = rootFolder.GetTasks(0);
            foreach (var registeredTask in registeredTasks)
            {

            }
        }
    }
}

为了向您证明它的运行,这里是从网页调用的运行代码的屏幕截图

在此处输入图像描述

正如你在我的机器上看到的,我从我的任务调度程序中抓取了 5 个项目。

顺便说一句,我在我的博客中为您创建了一篇关于如何:

  1. 获取所有计划任务
  2. 创建/更新计划任务
  3. 删除计划任务

在这里http://macaalay.com/2013/10/02/programmatic-management-of-scheduled-task/

于 2013-10-01T03:48:49.980 回答
0

我宁愿使用Quartz.net,它对我来说看起来更灵活,而不是 windows 任务调度程序,但这个想法可以适用于两种类型的调度程序,看看下面的案例来了解这个想法,也许这可以帮助你:

  • 创建 WCF
  • 从您的 asp-net-mvc 应用程序使用 WCF 服务
  • WCF 将具有执行常见操作(如添加和删除任务)的方法
  • 将任务信息存储到持久性存储(db、no-sql、xml 等)或缓存中
  • 您必须有一个作业(来自石英)读取数据库并将任务创建到 windows 框中,此作业可以每 x 分钟或 y 小时运行一次
  • 使用信息并执行 FIFO 操作
  • 在您的 asp-net-app 中创建一个表单供用户输入任务,该表单会将信息发送到您的 wcf 服务

编辑:您需要牢记以下几点:wcf 将为您提供处理 Web 应用程序任务所需的“状态”,quartz 可以处理读取数据库和设置新任务的工作(quartz 或windows scheduler) 和 web 表单只是处理这些操作的前端。

在石英中建立工作可能很简单:

public class ReadDBJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        // Do your work to read the database
        // and create the tasks that you need

    }
}
于 2013-10-01T16:01:23.957 回答