Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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,我已经通过Windows Task scheduler每5分钟运行一次批处理文件,并且由于我遇到了很多问题,例如Task scheduler进入挂起状态而没有返回到服务—我决定使用Windows服务,主要是因为我可以通过我们的监视来监视服务,从而调用恢复操作基础设施 因此,我创建了一个服务来运行它。 该服务是构建和安装的,但当我启动调用循环的批处理文件并执行一组任务的服务时,它会一直循环 批处理文件如下所示: @echo off :begin cd c:\work\scripts\matm\ c

我已经通过Windows Task scheduler每5分钟运行一次批处理文件,并且由于我遇到了很多问题,例如Task scheduler进入挂起状态而没有返回到服务—我决定使用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函数中定义的流程类的新实例,如何停止服务

感谢您的帮助和反馈

问候,,
Sash

用C编写一个自定义包装器控制台应用程序,其中包含错误恢复逻辑

使用Windows任务计划程序定期调用包装程序应用程序。您可以将其配置为仅在作业尚未运行时启动作业。您还可以使其终止现有作业

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


考虑到一个服务可能会帮助您解决这个问题,下面是我要做的:在OnStart方法中,启动一个每10分钟计时一次的计时器,然后启动脚本。或者,启动一个线程,在调用脚本之间休眠10分钟。

我想取消任务调度器。它还向所有人公开我的代码。还有其他选择吗?任务调度程序不仅仅是挂起。它已经在数百万台服务器上使用了10年。可能您的脚本挂起,在这种情况下,以不同的方式调用它并没有帮助。如果您不同意,编写服务对您没有任何帮助-它对您有什么帮助?。不管怎样,我不清楚你的a和b子问题。但如果你不使用服务,而是使用普通的控制台应用程序,它们就会消失。;此外,您的脚本似乎有一个无限循环,每10分钟运行一次。你不能在Windows启动时使用任务调度程序启动它一次,它就会永远运行吗?为什么不行?好吧,让我详细说明一下。脚本在任务调度器上运行了相当长的一段时间,但要运行任务调度器,我需要对该帐户拥有提升的权限。现在,根据在框上强制执行的新组策略,我看到用户从提升权限组中被删除。我总是将其添加到管理组,而任务计划程序则坐在那里不做任何操作。使用任务计划程序,我每10分钟运行一次批处理文件,因此没有无限循环。我不知道构建一个服务是否可以帮助消除这种依赖性。您是否知道选择本地系统帐户是否有帮助,因为那里没有用户帐户的规范。我已经修改了批处理文件,以便在服务启动后,脚本每10分钟继续无休止地运行一次,因为我认为没有办法在服务上设置等待时间。回到第二个子问题,脚本是JScript和VBScript。我不想让别人知道。创建服务有助于隐藏正在运行的批处理文件。想法?我对Windows安全概念不太了解。无法使计划任务使用本地系统吗?考虑到一个服务可能会帮助您解决这个问题,下面是我要做的:在OnStart方法中,启动一个每10分钟计时一次的计时器,然后启动脚本。或者,启动一个线程,在调用脚本之间休眠10分钟。据我所知,OnStart方法应该很快返回,因为服务启动时有一个超时。