Windows 7批处理文件无法作为服务启动

6

我正在运行一个Windows服务,在启动时会启动一个简单的批处理文件,但该服务无法启动。如果我尝试从服务GUI手动运行它,我会收到以下错误消息。

错误 1053:服务未能按时响应启动或控制请求

这似乎是服务启动期间常见的错误,但在其他答案中我没有找到类似的问题。我使用以下命令从命令行创建了该服务。

C:\Users\Administrator>sc create service_name binpath= c:\service.bat start= auto
[SC] CreateService SUCCESS

然后我使用以下命令运行它:

C:\Users\Administrator>sc start service_name

然而,我遇到了错误信息:

[SC] StartService FAILED 5:

访问被拒绝。

如果我以管理员身份从命令提示符中运行它,则不会出现访问被拒绝的消息,但我会收到1053错误。我想作为Windows服务运行一个批处理文件不应该那么困难。有什么建议吗?

你不能像那样将批处理文件作为服务运行,正如CoreTech所说,你需要一个包装器来正确地运行它。 - Bali C
1个回答

8
你之所以收到第一个错误,是因为你的批处理文件无法与Windows服务子系统进行协商/交互。当Windows启动服务时,操作系统会等待几秒钟,以便服务报告其已正确启动。如果这个信号从未到达(就像你的批处理文件一样,它对服务一无所知),Windows将报告错误#1053。
你需要一个“包装”应用程序来将批处理文件作为服务运行。Microsoft的免费“SRVANY”实用程序 可能适合你,但你也应该调查更全面的商业替代方案。

1
那似乎就是问题所在。现在使用命令行中的srvany和instsrv,给出c:\Tools\instsrv.exe myservice c:\Tools\srvany.exe,一切都正常工作了。首先,需要将bat文件编译为exe,然后通过regedit对服务注册表(HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > services > myservice)的2个值进行更改。我添加了一个名为Parameters的新键,其中包含String值AppDirectory和Application,其值为c:\mypath和c:\mypath\mybat.exe。通过这些更改,现在它可以正常工作了。非常感谢您的帮助 :) - BFinn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接