用于安排.NET应用程序每天运行的用途是什么?

时间:2013-05-15 22:05:11

标签: c# .net powershell scheduled-tasks

我有一个.NET 4控制台应用程序,运行时使用R3连接使用ERPConnect向SAP发出数据请求,并在将转换后的数据加载到同一个SQL Server数据库之前从SQL Server数据库中提取一些映射数据。

我被要求按日计划运行。

有没有人就如何做到这一点提出建议?

我最初的想法是: .bat文件和Windows任务计划程序 要么 Windows Powershell

有没有人有任何建议或原因可以选择一个而不是另一个?

4 个答案:

答案 0 :(得分:8)

我只会使用Windows Task Scheduler,并安排任务。这是一种简单,易于重新配置的方法,可以配置为直接运行控制台应用程序(不需要批处理文件)。

此处的优点是您可以随时更改计划,例如时间或频率,只需配置系统的计划。

答案 1 :(得分:2)

我建议使用Windows任务计划程序和批处理文件来执行此操作。但问题是,你真的需要批处理文件吗?我有很多从WTS调用的应用程序,它可以直接调用应用程序。我建议更改您的控制台应用程序,以便您无需批处理文件。

答案 2 :(得分:1)

您可以非常简单地从PowerShell设置预定作业:

Register-ScheduledJob -FilePath \\svr\share\foo.ps1 -Trigger @{Frequency=Daily;At="9:00PM"} -ScheduledJobOption @{WakeToRun}

这确实需要PowerShell v3。在幕后它正在使用任务调度程序。还有一个用于注册任务的Register-ScheduledTask cmdlet与运行PowerShell脚本不对应。

是使用任务计划程序UI手动执行此操作还是使用脚本自动执行此操作取决于这是一次性设置(手动)还是需要在一台计算机或多台计算机上重复任务设置(自动执行)它)。

答案 3 :(得分:0)

就像你正在做的那样简单,Windows任务计划程序可以正常工作。我们已经完成了一些事情,特别是因为你处理像SAP这样的ERP系统,我做了一个Windows服务,它击中了一个表,在那个表里面是一个程序集和类名列表,我想根据一个间隔和下一个运行dateTime开始。使用反射我根据与当前日期时间相比的nextrun日期时间调用我需要运行的程序集中的类。此外,每个类都接受一个nameValueCollection,因此我可以为每个类创建XML列,以便动态地将配置设置传递给每个类。我要做的就是更新该列和下一次运行时新设置到位,而不必停止或重新启动服务。当然,你可以让你的控制台应用程序在每次运行时拉入配置文件,并且基本上做同样的事情(如果你使用windows预定任务管理器,我强烈建议你这样做)。这使得PRD失效并且您需要快速将应用程序指向QAS或开发系统,或维护用户名和密码(如果您要这样做,我会加密)。如果您需要业务分析师对该特定任务进行一些控制,那么拥有该数据驱动的后端可以允许您构建前端。听起来好像很多工作,但事实并非如此。

还有一个注意事项:我确信你不会在XP上设置这个但是如果你记住我已经多次看到WTS cryptoservice(不确定cryptoservice是100%正确的,但它的东西是那些line。)被破坏,计划任务失败,这可能是一团糟。我们在SAP的机器上运行RFC以获取文件和计划任务,确保它们正在运行,有时这些事情会失败,RFC不会重新启动并导致各种问题。