在XP中运行一个bat文件作为一个windows服务

即时通讯使用Windows XP,我想运行一个特定的bat文件作为一个Windows服务。有没有办法做到这一点?

请帮助谢谢

您可以使用sc命令。 例如,从命令提示符处:

 sc create MyService binPath= "C:\Program Files\Windows Resource Kits\Tools\Srvany.exe" DisplayName= "My Windows Service" 

去除:

 sc delete Service 

现在,创build的服务使用Srvany.exe,它是Windows资源工具包的一部分 。 这使您可以使用您的软件定义服务,否则将不支持它。

之后,您将需要使用RegEdit在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\下为您的服务创build一个“Parameters”键。 在这个关键字中,你需要创build一个名为“Application”的string值,然后input要作为服务运行的batch file的完整path。

微软也有这方面的指示 ,以及最初使用不同的方法来创build服务。

将batch file作为服务运行是一个相当奇怪的应用程序,并且存在一个合理的可能性,那就是您将遇到问题。

假设你有一个连续循环运行的batch file,我想你可以运行batch file作为服务。 像华纳说,你将不得不使用“服务pipe理器”包装(如华纳提到的SRVANY,或免费的非吸收服务pipe理器(NSSM) )程序。

华纳关于创build一个服务的描述(SC / SRVANY)是完全正确的。 对于某些技术背景: 真正的服务程序响应来自服务控制pipe理器(SCM)的控制function。 这些控制function允许服务控制pipe理器(以及服务pipe理控制台pipe理单元等)停止,启动,暂停等服务程序。 基本stream程是:

SCM – (调用) – > wrapper(SRVANY,NSSM) – (调用) – >你的程序

如果你的batch file在你停止服务的时候产生额外的进程(这实际上是停止包装程序),你会发现你的batch file产生的程序不会被杀死,并且会无限期地挂起来。

SRVANY也不监视你的batch file(在CMD.EXE中运行),如果你的程序“死亡”,“服务”仍然会被列为“开始”。 (NSSM可以监视孩子CMD.EXE并重新启动它,但是NSSM仍然存在在服务停止时没有终止batch file的subprocess的问题)。

NSSM有一个GUI来帮助创build服务并将其与您的程序相关联。 如果您不是命令行和registry操作类的人,您可能会喜欢这一点。

总而言之,在包装中运行非服务程序并不是一个推荐的做法。 我在一些生产环境中这样做,但是我总是很谨慎,并且在我认为它“正在工作”之前尝试testing这些应用程序。