安排批处理文件从Windows服务运行

时间:2013-12-04 11:55:16

标签: c# windows-services

我已经通过Windows任务计划程序每隔5分钟运行一个批处理文件,因为我遇到了很多问题,比如任务调度程序进入挂起状态而没有返回服务 - 我决定主要使用Windows服务因为我可以通过监控基础架构监控服务来调用恢复操作。

所以,我已经创建了一个服务来运行它。 该服务已经构建并安装,但是当我启动调用批处理文件并执行一组任务的服务时,它会一直循环。

批处理文件是这样的:

@echo off
:begin
cd c:\work\scripts\matm\
cscript //E:jscript c:\work\Scripts\matm\matm.js >> C:\work\Scripts\matm\matm.log;
cscript //E:vbscript c:\work\Scripts\matm\TruncateLog.vbs  
>>c:\work\Scripts\matm\TruncateLog.log;
del C:\work\Scripts\matm\Logs\myserver\matm.csv
timeout 600
goto begin

从命令提示符运行时,批处理脚本运行正常,这就是我期望服务调用的内容。

我的想法是,一旦我们启动它,服务就会进入循环,并且永远不会出现。

我已在此Onstart部分上定义了对批处理文件的调用,如下所示

protected override void OnStart(string[] args)

我的问题是: -

a)如何确保服务在启动后不会“开始”运行批处理文件?如果我的构思错了,我怎么能每5分钟运行一次服务?

b)如何停止服务?或者,如果proc是我在onstart()函数中定义的Process类的新实例,我该如何停止服务。

感谢您的帮助和反馈。

此致 窗扇

1 个答案:

答案 0 :(得分:0)

在包含错误恢复逻辑的C#中编写自定义包装器控制台应用程序。

使用Windows任务计划程序定期调用您的包装器应用程序。您可以将其配置为仅在尚未运行的情况下启动作业。你也可以杀掉现有的工作。

无需使用Windows服务。它们很复杂。


鉴于服务可能会帮助您解决问题,这就是我要做的事情:在OnStart方法中,启动一个每10分钟计时一次的计时器并启动您的脚本。或者,启动一个在调用脚本之间休眠10分钟的线程。