是否可以从asp.net-mvc站点或其他远程选项管理Windows调度程序?

时间:2013-09-25 13:01:50

标签: asp.net-mvc windows-scheduler

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

我发现你可以通常使用C#(下面的链接)来做这件事但不确定权利等可以通过网络应用程序进行管理。

如果无法从网上获取,是否有其他“远程”选项,那么大家可以这样做而无需进入特定的盒子?

2 个答案:

答案 0 :(得分:10)

是的,您可以,只需使用可在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)
            {

            }
        }
    }
}

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

enter image description here

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

BTW我在博客中为您创建了一篇完整文章,内容如下:

  1. 获取所有预定任务
  2. 创建/更新计划任务
  3. 删除预定任务
  4. 在这里http://macaalay.com/2013/10/02/programmatic-management-of-scheduled-task/

答案 1 :(得分:0)

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

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

编辑: 你需要记住以下几点: wcf将为您提供处理Web应用程序任务所需的“状态”状态,quartz可以处理读取数据库和设置新任务的工作(石英或Windows调度程序),Web表单只是前面的结束处理这些行动。

在石英学校工作就像:

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

    }
}