C# 如何安排.NET应用程序每天运行?

C# 如何安排.NET应用程序每天运行?,c#,.net,powershell,scheduled-tasks,C#,.net,Powershell,Scheduled Tasks,我有一个.NET 4控制台应用程序,当运行时,它使用ERPConnect发出数据请求,使用到SAP的R3连接,并在将转换后的数据加载到同一个SQL Server数据库之前从SQL Server数据库获取一些映射数据 我被要求每天进行跑步 有人对如何做到这一点有建议吗 我最初的想法是: .bat文件和Windows任务计划程序 或 Windows Powershell 有人有什么建议或理由让你选择一个而不是另一个吗?我只想使用,并安排任务。这是一种简单、易于重新配置的方法,可以配置为直接运行控制台

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

我被要求每天进行跑步

有人对如何做到这一点有建议吗

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

有人有什么建议或理由让你选择一个而不是另一个吗?

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


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

我建议使用Windows任务计划程序和批处理文件。但问题是,您是否确实需要批处理文件?我有很多从WTS调用的应用程序,它可以直接调用应用程序。我建议您更改您的控制台应用程序,这样您就不需要批处理文件。

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


还有一点需要注意:我确信你不太可能在XP上设置这个,但是如果你记住,我已经多次看到WTS cryptoservice(不确定cryptoservice是否100%正确,但这是类似的东西)被损坏,计划任务失败,这可能是一团混乱。我们在SAP的计算机上运行RFC以拾取文件,并执行一项计划任务,确保它们正在运行,有时这些任务会失败,RFC不会重新启动并导致各种问题。

您可以通过PowerShell非常简单地设置计划作业:

Register-ScheduledJob -FilePath \\svr\share\foo.ps1 -Trigger @{Frequency=Daily;At="9:00PM"} -ScheduledJobOption @{WakeToRun}
这确实需要PowerShell v3。在幕后,它正在使用任务调度器。还有一个
Register ScheduledTask
cmdlet,用于注册与运行的PowerShell脚本不对应的任务


您是使用任务调度器UI手动执行此操作,还是使用脚本自动执行此操作,取决于这是一次性设置(手动执行),还是需要在一台机器或多台机器上重复任务设置(自动执行).

任务调度器几乎是实现这一点的标准方法。任务调度器是正确的方法。在一个24/7在线的服务器上-不是你的桌面!谢谢你的建议,是的,你的权利如果我不需要它,我不想要它。这样做有什么基本的缺陷吗?你必须打开电脑并运行服务。。它无法赶上错过的任务。