根据此链接,
How to Create a User-Defined Service
您可以使用Windows NT资源工具包创建Windows服务。例如,如上面的链接所示,
C:\Program Files\Resource Kit\Instsrv.exe Notepad C:\Program Files\Resource Kit\Srvany.exe
但这在Windows 7或10和64位平台上不起作用,因为Windows NT资源工具包不适用于新Windows。
我能够使用此批处理文件创建Windows服务,
sc create "MyService" binPath= "C:\Program Files (x86)\MyProg\myprog.exe" start= auto DisplayName= "My Service" obj= LocalSystem
但是它不会启动Windows服务。当我尝试启动时,收到此消息,
“ Install a Windows service using a Windows command prompt?”和“ Create Windows service from executable”中的信息无效。
如何正确启动Windows服务?
答案 0 :(得分:1)
Srvany.exe
是一个古老的程序,据我所知,它将一直运行到Windows2003。您可能会忘记它在Windows 7/10中已经存在。
要在Windows 7/10上启动/停止服务(我正在使用acronis服务),其服务名称通常与显示名称大不相同:
停止正在运行的服务:
sc stop syncagentsrv
SERVICE_NAME: syncagentsrv
TYPE : 10 WIN32_OWN_PROCESS
STATE : 3 STOP_PENDING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_PRESHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
开始运行服务:
sc start syncagentsrv
SERVICE_NAME: syncagentsrv
TYPE : 10 WIN32_OWN_PROCESS
STATE : 2 START_PENDING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_PRESHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
PID : 2240
FLAGS :
检查服务状态:
sc query syncagentsrv
SERVICE_NAME: syncagentsrv
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_PRESHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
要创建您想要的服务,
sc create "MyService" binPath="C:\Program Files (x86)\MyProg\myprog.exe" start=auto DisplayName="My Service"
这仅创建服务并将记录添加到注册表/ serviceDB中。您需要检查exe文件本身。
您不需要 obj = LocalSystem ,因为这是默认选项。不要在等号=
和值之间创建空格!
您是否检查了事件查看器?启动服务时会说什么?只有超时? myprog.exe
是否可以单独工作而不提供服务?请回答这些问题,我将编辑答案。
有一个名为SrvStart的小实用程序(最初来自Nick Rozanski),但是现在已针对VS 2017进行了修改(获取srvstart.v120.zip
,需要进行构建)。如果您对旧版本满意,并已经提供了exe文件,请下载srvstart_run.v110.zip
,然后将* .exe文件和* .dll复制到目录中,如下所示。
将所有文件复制到 C:\ Windows (是,您的Windows目录)。原因是C:\ Windows应该始终位于您的PATH
中,以便SrvStart可执行文件可以访问。
现在创建一个MyProg.ini文件:
[MyService] startup =“ C:\ Program Files(x86)\ MyProg \ myprog.exe” shutdown_method = winmessage
winmessage
会在您关闭服务时强制关闭所有打开的窗口。
然后将*.ini
文件直接放到根c:\
中。
然后使用命令:
sc create <servicename> Displayname= "<servicename>" binpath= "srvstart.exe <servicename> -c <path to srvstart config file>" start= <starttype>
在您的情况下,它将是:
sc create "MyService" DisplayName="My Service" binPath="srvstart.exe MyService -c C:myprog.ini" start=auto
注意:在\
和C:
之间没有反斜杠(myprog.ini
)。
现在检查您的服务,您应该在此处看到“我的服务”名称,它的行为应类似于服务。
显然,您需要使用VS2017编译的srvstart 120版本,以使其在@ Win10上正确运行。唯一可用的版本是旧的1.1版本,在Win10上似乎无法正常工作。
适用于CodenameK的解决方案是使用-NSSM - the Non-Sucking Service Manager。如果有人需要,以备将来参考。