我正在使用 Windows XP,我想将特定的 bat 文件作为 Windows 服务运行。有什么办法吗?
请帮忙谢谢
答案1
您可以使用sc
命令。例如,从命令提示符:
sc create MyService binPath= "C:\Program Files\Windows Resource Kits\Tools\Srvany.exe" DisplayName= "My Windows Service"
去除:
sc delete Service
现在,创建的服务正在使用 Srvany.exe,它是Windows 资源工具包. 这使得您可以使用软件定义一项原本不支持的服务。
之后,您需要使用 RegEdit 在 下为您的服务创建一个“参数”键HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\
。在该键内,您需要创建一个名为“Application”的字符串值,并输入要作为服务运行的批处理文件的完整路径。
微软指示为此,最初使用不同的方法来创建服务。
答案2
将批处理文件作为服务运行是一个相当奇怪的应用程序,而且很有可能会遇到问题。
假设您有一个以连续循环方式运行的批处理文件,我想您可以将该批处理文件作为服务运行。正如 Warner 所说,您将需要使用“服务管理器”包装器(例如 Warner 提到的 SRVANY,或免费的非吸吮服务管理器 (NSSM)) 程序。
Warner 的关于使用 SC 创建服务的描述(引用了 SRVANY)完全正确。以下是一些技术背景:真实的服务程序响应来自服务控制管理器 (SCM) 的控制功能。这些控制功能允许服务控制管理器(以及服务管理控制台管理单元等)停止、启动、暂停等服务程序。基本流程是:
SCM --(调用)-->包装器(SRVANY,NSSM)--(调用)-->你的程序
如果您的批处理文件在您停止服务(实际上是停止包装程序)时产生了其他进程,您会发现批处理文件产生的程序不会被终止并且会无限期地挂起。
SRVANY 也不会监视您的批处理文件(在 CMD.EXE 中运行),并且如果您的程序“死亡”,则“服务”仍将列为“已启动”。 (NSSM 可以监视子 CMD.EXE 并重新启动它,但 NSSM 仍然存在服务停止时不终止批处理文件的子进程的问题)。
NSSM 有一个 GUI 来帮助创建服务并将其与您的程序关联。如果您不喜欢命令行和注册表操作,您可能会喜欢它。
总而言之,在包装器中运行非服务程序并不是推荐的做法。我在一些生产环境中这样做,但我总是对此保持警惕,并尝试在认为它“有效”之前对此类应用程序进行大量测试。