从Web应用程序运行计划任务

时间:2014-05-03 05:43:09

标签: c# asp.net .net scheduled-tasks

我正在使用以下代码从我的Web应用程序执行Windows计划任务。 Web应用程序和计划的应用程序都在同一台服务器上运行。

var proc = new Process
{
    StartInfo =
    {
        UseShellExecute = false,
        FileName = @"C:\Windows\System32\schtasks.exe",
        Arguments = "/run /tn StartDataSync",
        UserName = "admin123",
        Password = passwd
    }
};
proc.Start();
proc.WaitForExit();

现在,我想从同一网络域中另一台计算机上运行的Web应用程序运行相同的计划应用程序。当我研究时,我发现像我可以在/ S系统参数中指定我要连接的远程计算机的名称或IP地址。所以我尝试了以下代码,但它没有用。

var proc = new Process
{
    StartInfo =
    {
        UseShellExecute = false,
        FileName = @"C:\Windows\System32\schtasks.exe",
        Arguments = "/run /S 192.168.5.202 /tn StartDataSync",
        UserName = "admin123",
        Password = passwd
    }
};
proc.Start();
proc.WaitForExit();

2 个答案:

答案 0 :(得分:2)

尝试此答案..根据此post

using TaskScheduler;

using (TaskService tasksrvc = new TaskService(server.Name, login, domain, password)
{
    Task task = tasksrvc.FindTask(taskName);
    task .Run();       
}

任务计划程序的dll可以在https://github.com/dahall/taskscheduler

找到

答案 1 :(得分:2)

是否考虑过直接从Web应用程序安排执行EXE的其他替代方法?

例如,使用Revalee开源项目可以在ASP.NET项目中安排任务。

Revalee是一项服务,允许您安排Web回调到您的Web应用程序。在您的情况下,您将安排一个回调,以便在特定时间同步您的数据。 Revalee非常适用于离散事务操作的任务,例如更新某些数据库值或发送自动电子邮件消息(读取:不长时间运行)。执行操作的代码都将驻留在您的应用中。

要使用Revalee,您会:

  1. 在服务器上安装Revalee Service(Windows服务)。 Windows服务在源代码(您可以自己编译)或Revalee website中提供的预编译版本中提供。

  2. 在Visual Studio项目中使用Revalee客户端库。 (还有一个特定于MVC的版本。)客户端库在源代码中可用(您可以自己编译)或通过NuGet提供的预编译版本。

  3. 当您的代码调用ScheduleDataSynchronization()方法时,您将注册将来的回调(此示例假设您需要在12小时后执行操作)。

    private void ScheduleDataSynchronization()
    {
        DateTimeOffset callbackTime = DateTimeOffset.Now.AddHours(12.0);
    
        // The callback should be in 12 hours from now
        Uri callbackUrl = new Uri(string.Format("http://mywebapp.com/SyncData.aspx"));
    
        // Register the callback request with the Revalee service
        RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl);
    }
    
  4. 当Revalee重新调用您的应用程序时,您的应用程序将执行您编写的任何操作。您可以通过将以下方法调用(SynchronizeData())添加到SyncData.aspx页面处理程序,àla:

    来执行此操作
    private void SynchronizeData()
    {
        // TODO Lookup the job information and execute the data synchronization
        // ...
    
        return;
    }
    
  5. 我希望这会有所帮助。

    注意:上面的代码示例使用ScheduleCallback()的同步版本,Revalee客户端库也支持异步调用àla:

    RevaleeRegistrar.ScheduleCallbackAsync(callbackTime, callbackUrl);
    

    如果上面不清楚,Revalee服务不是外部第三方在线调度程序服务,而是安装在您自己的网络上完全控制的Windows服务。它驻留在您自己选择的服务器上并运行,很可能是您的Web服务器(但这不是必需的),它可以从ASP.NET应用程序接收回调注册请求。

    免责声明:我是参与Revalee项目的开发人员之一。但需要明确的是,Revalee是免费的开源软件。源代码可在GitHub上找到。