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

本文关键字:计划 任务 运行 应用程序 web | 更新日期: 2023-09-27 18:01:31

我使用以下代码从我的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();

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

试试这个答案。根据这篇文章

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

是否考虑过直接从web应用程序调度EXE执行的不同替代方案?

例如,从ASP中调度任务。. NET项目可以使用Revalee开源项目。

Revalee是一个允许你调度web回调到你的web应用程序的服务。在您的示例中,您将安排一个回调,以便在特定时间同步您的数据。Revalee可以很好地处理离散事务性操作的任务,比如更新一些数据库值或发送自动电子邮件消息(阅读:不长时间运行)。执行操作的代码将全部驻留在应用程序中。

要使用Revalee,您可以:

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

  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;
    }
    

我希望这对你有帮助。

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

RevaleeRegistrar.ScheduleCallbackAsync(callbackTime, callbackUrl);

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

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