我已经编写了一个服务来执行批处理职责,但要求是在下午4:00开始处理并在凌晨5点结束处理。如果仍在处理作业,则需要延长时间直到作业完成。
我会在计时器中包装onstart电话还是什么?我真的不知道这会是什么样子,因为我习惯于服务开始和运行直到无穷大(或直到盒子坦克......或者一个未处理的例外)。
我非常感谢有关如何实现这一目标的一些想法。
编辑:我确实需要服务,因为我通过dtexec()和C#中的批处理文件执行SSIS包。其他一些事情也必须发生,例如记录到dbase和队列管理。
每个作业的时间长度各不相同,有些会在几分钟内完成,有些则需要5个小时。
答案 0 :(得分:4)
这听起来像Windows任务计划程序更好地处理的任务。除非您运行的是Win2K或XP,否则它具有在特定时间启动所需的所有设置,允许它在有限的时间内运行,它可以在特定凭据下启动该进程(如果您需要它运行)升级),以及没有人登录时运行。
它有一个非常方便的GUI来管理它,无需编码!
<强>更新强>
好的,根据您的评论,您真正需要的是工作流程。我要做的是,在单独的项目中开发每个单独的任务(单独的.exe或.dll,具体取决于您的需要)。然后查看并Windows Workflow Foundation并开发一个工作流程“控制器”,您可以使用它来运行各个任务。
答案 1 :(得分:1)
我认为该服务应该运行到无穷大并检查时间,看看是否已经是下午4:00,如果是的话,开始它的工作,当凌晨5点开始时,只需完成并再次下午4:00。
答案 2 :(得分:1)
您要找的是scheduled job
如果你/必须/有一个Windows服务,你使用计时器并设置计时器每次检查一次(每当我用这种东西30分钟),如果时间是凌晨4点到凌晨5点,那就行了。
答案 3 :(得分:1)
您可以查看quartz.net,这是一个很好的调度库,可以执行此类操作,并可以在您的服务中运行。
答案 4 :(得分:1)
三个选项:
您可以使用Windows任务计划程序并在指定时间启动任务,然后在程序中跟踪任务运行的时间。
让服务不断“运行”,但在执行之间休眠一段时间。但是,如果程序的运行时间超过预期,则会导致问题。
将服务设置为以15分钟(左右)的间隔运行,并检查它是什么时间。如果是在您的开始阶段,请启动该程序。
第一和第三似乎是最好的选择。