Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何按计划启动和停止windows服务?_C#_Windows Services - Fatal编程技术网

C# 如何按计划启动和停止windows服务?

C# 如何按计划启动和停止windows服务?,c#,windows-services,C#,Windows Services,我编写了一个服务来执行批处理任务,但要求在下午4:00开始处理,在上午5:00结束处理。如果有作业仍在处理,则需要延长时间,直到作业完成 我会把onstart调用包装在计时器中还是什么?我真的不知道这会是什么样子,因为我习惯于服务启动并运行到无穷远(或者直到盒子罐…或者遇到未处理的异常) 我绝对希望能有一些关于如何实现这一目标的想法 编辑:我确实需要一个服务,因为我正在通过dtexec()和C#中的批处理文件执行SSIS包。其他一些事情也必须发生,比如登录到数据库和队列管理 每个作业都有不同的时

我编写了一个服务来执行批处理任务,但要求在下午4:00开始处理,在上午5:00结束处理。如果有作业仍在处理,则需要延长时间,直到作业完成

我会把onstart调用包装在计时器中还是什么?我真的不知道这会是什么样子,因为我习惯于服务启动并运行到无穷远(或者直到盒子罐…或者遇到未处理的异常)

我绝对希望能有一些关于如何实现这一目标的想法

编辑:我确实需要一个服务,因为我正在通过dtexec()和C#中的批处理文件执行SSIS包。其他一些事情也必须发生,比如登录到数据库和队列管理


每个作业都有不同的时间长度,一些作业将在几分钟内完成,另一些作业则需要5小时。

这听起来像是一个由Windows任务计划程序更好地处理的任务。除非您正在运行Win2K或XP之类的程序,否则它具有在特定时间启动所需的所有设置,允许它在有限的时间内运行,它可以在特定凭据下启动进程(如果您需要它运行提升版),也可以在无人登录时运行

而且它有一个很好的方便的GUI来管理它,无需编码

更新


好的,根据你的评论,你真正需要的是一个工作流程。我要做的是,在一个单独的项目中开发每个单独的任务(根据需要分别开发.exe或.dll)。然后寻找并开发一个工作流“控制器”,您可以使用它来运行各个任务。

我认为该服务应该一直运行到无限期,并检查时间是否已经是下午4点,如果已经是下午4点,则启动它的工作,当早上5点罢工时,只需完成并再次在下午4点进行调整。

您要找的是

如果您/必须/拥有windows服务,您可以使用计时器,并将计时器设置为每小时检查一次(无论何时,我都会使用30分钟进行此类检查),如果时间在凌晨4点到凌晨5点之间,请务必工作。

您可以查看,这是一个很好的计划库,可以完成这类工作,并可以在服务过程中运行。

三个选项:

  • 您可以使用Windows任务计划程序,在指定的时间启动任务,然后在程序中跟踪任务已运行的时间

  • 让服务持续“运行”,但在执行之间睡眠一定时间。然而,如果程序运行的时间比预期的长,这将导致问题

  • 将服务设置为每隔15分钟(大约15分钟)运行一次,然后检查时间。如果是在您的开始期间,请启动该程序


  • 第一个和第三个似乎是最好的选择。

    为什么要停止服务而不仅仅是停止处理?如果第二个进程依赖于第一个进程,那么在第一个进程完成之前尝试运行第二个进程是没有意义的。。如果两个进程彼此完全独立,并且不共享相同的数据,即数据库表更新、插入、删除等。。。然后,听起来您必须运行第一个进程,直到它完全完成。这不需要服务。只需安排一项任务。它将运行到finished@fullNelson-如果您已经在SQL Server中,SQL Server代理将提供此功能。@fullNelson-听起来您已经定义了SQL代理作业的要求。哪部分不适合你?我们在我工作的地方做了一些类似的事情(虽然不漂亮也不优雅,但它可以工作)。我必须使用服务,因为我正在处理流程的执行。基本上是通过dtexec和批处理文件启动SSIS包。SSIS包必须在服务终止之前完成。任务计划程序很吸引人,但我想知道,当服务有一个作业需要完成时,您是否可以让它在关闭时间之后继续运行。正如我所说,这是一个SSIS包,我通过C#中的dtexec启动它。即使关闭时间超过凌晨5点,工作也必须完成。到目前为止,我最喜欢选项3。实际上,这是一个很好的工具集。我花时间读了这本书的全部内容。我不知道这次我是否会用它,但是+1代表这个想法。是的,我同意你所说的。在我的例子中,不使用它的唯一限制是服务必须完成其处理,即使它超过了时间限制。我很确定这不能用TS完成。如果我错了,请纠正我。是的,你错了。我不确定如果你实际上不打算应用“时间限制”,那么设置“时间限制”的意义何在。但是,是的,你可以启动任务,让它运行,直到完成,然后停止,完成。我遗漏了什么吗?应用程序基本上是一个作业处理队列。存在处理时间不同的混合作业。有些作业会在凌晨5点之前停止,有些作业可能会持续一整晚,在这种情况下,我们可能只会在下午4点到凌晨5点之间运行一个作业。如果作业在凌晨4:59完成,处理必须停止,并让针对该数据库运行的其他服务继续其工作。这就是时间限制的目的。WWF是我计划在未来几个月内重点处理这些“计划”程序的途径。鉴于您的建议是使用WWF,我一定会考虑这个项目,现在开始。