使用 nssm 的 Windows 服务能运行,但无法使用 Windows SC 运行

3

我需要将一个GoLang编译的.exe文件转换为Windows服务,但由于该服务从外部执行需要9个参数,所以我决定使用SC将.exe文件作为服务运行。我的语法是:

sc create myservice binPath= "\"PATH\file.exe\" -param1=value -param2=value -param3=value...-param9=value" displayname= "MyServer"  start= auto

服务已成功创建,但当我尝试启动它时,它会失败并显示“服务未能及时响应”的错误信息。

但是,当我使用nssm语法创建相同的服务时,却没有出现这个问题。

nssm install myservice "PATH\file.exe" -param1=value -param2=value -param3=value...-param9=value

它一直在工作,我也从我的服务中获取到了响应,但我不知道问题是SC中的语法还是我的服务中的问题...

我甚至尝试了许多可能的方法,比如删除 \ " 并直接给出参数,例如 binPath=“PATH/file.exe -param1=value -param2=value...param9=value”,但它没有起作用,我还尝试将参数放在引号内传递,这也没用 :( 任何帮助都将不胜感激。


@HarryJohnston 谢谢你的建议,兄弟。但我觉得这与svc包无关,因为它只处理已经是服务的内容。我在这里尝试的是手动将exe转换为服务,而不是使用GO。而且,看起来sc命令对于给定的参数并不友好。 - undefined
1
你说过 sc 对你的其他可执行文件有效,所以那些可执行文件必须使用了 svc 包或者类似的东西。对于没有被构建成服务的可执行文件,你不能直接使用 sc。这是行不通的。(当然,你可以通过将其指向 srvany.exenssm.exe 或类似的方式来间接使用 sc。) - undefined
请复制并粘贴sc qc myservice的输出结果,分别针对无法工作的服务和其中一个正常工作的服务。(当您使用sc安装服务和使用nssm安装服务时,比较和对比sc qc的输出结果可能也会有所帮助。) - undefined
@HarryJohnston 谢谢你的命令... 但是 nssm 仅显示 binpath 为 C:\test\nssm.exe,而没有参数... 我的 binpath 是我提供的带有参数的路径 (C:\test\myapp.exe -param1=xx -param2=xxx...),所以... - undefined
而且我还没有得到那个问题的适当解决方案... 哎,悲伤的生活 :'( - undefined
显示剩余3条评论
1个回答

6

SC可以愉快地将任何可执行文件安装为Windows服务,但它应该仅用于安装已经是Windows服务的可执行文件。如果您使用SC安装常规exe,则在尝试启动时,您的服务将失败并显示错误1053。您的Go exe不实现Windows服务接口,因此成为这种情况的受害者。


但是我已经处理了其他使用GO编译的.exe文件,并且它们在SC上运行良好..只有这个带有9个参数的.exe文件在启动时遇到了困难,而从您的声明“它应该仅用于安装已经是Windows服务的可执行文件”中,您能解释一下吗? - undefined
请注意,nssm 不能用于安装实际的服务,它只是用来运行任意应用程序并使其看起来像服务一样。如果 nssmsc 都能正常工作,那么你的可执行文件可能过于聪明了,根据启动方式会以服务或应用程序的形式运行。 - undefined
谢谢提供的信息,但是我真的搞不清楚服务和可执行文件之间的区别。从互联网上了解到,服务是在服务管理器监控下运行的可执行文件,而普通的可执行文件则是在Windows管理器监控下运行的。虽然它们都在执行,但我还是不太清楚。需要进一步学习。 - undefined
你确定你的其他Go应用程序作为Windows服务正常工作吗?一旦启动,它们不会出现错误#1053吗? - undefined
1
@Kamikaze:一个普通的应用程序不需要调用窗口管理器函数,除非它真的想要显示一个窗口,但是一个服务应用程序必须调用服务控制管理函数(例如StartServiceCtrlDispatcher)才能正常运行。如果不这样做,服务控制管理器会认为它已经挂起并终止它。 - undefined
@CoreTech 是的,它正常工作,并且我正在运行另一个应用程序。 - undefined

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