【发布时间】:2016-06-28 05:49:56
【问题描述】:
我应该将 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 由于某些原因我无法发布代码,但我可以说代码中发生的过程。它获取机器的 CPU 使用率并在 HTTP POST 的帮助下将其发送到应用程序。应用程序需要我需要为我运行的每台机器提供的唯一数据,因此我将它们(唯一数据)作为外部参数(9 个参数)在 POST 中随 CPU 使用率发送。每 10 分钟它的 POST' ed 并且响应状态记录在日志文件中...
-
这个问题不太可能与服务的目的有关,所以这并没有真正的帮助。当可执行文件未能调用 StartServiceCtrlDispatcher 或调用速度不够快时,会发生错误 1053。从外观上看,您可以在 Go 中通过调用
golang.org/x/sys/windows/svc包中的Run函数来执行此操作。也许你的主函数没有调用Run就退出了,因为它不喜欢它给出的参数? -
@HarryJohnston 谢谢你的点兄弟,但我猜这与 svc 包无关,因为它只处理已经是服务的包.. 我在这里试图做的只是转换一个exe 手动服务,而不是从 GO .. 是的,看起来 sc 不喜欢给它的参数..
-
您已经说过
sc适用于您的其他可执行文件,因此这些可执行文件必须使用 svc 包或类似的包。 您不能直接在未构建为服务的可执行文件上使用 sc。这永远都行不通。(当然,您可以通过将sc指向srvany.exe或nssm.exe或等效项来间接使用sc。)
标签: windows windows-services nssm