使用批处理文件创建并启动 Windows 7 或 10 服务?
Create and start Windows 7 or 10 service using batch file?
根据 How to Create a User-Defined Service,您可以使用 Windows NT Resource Kit 创建一个 Windows 服务。比如上图link:
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 服务。当我尝试开始时收到此消息:
Windows could not start the OrchestrateIT Import Service service on Local Computer.
Error 1053: The service did not respond to the start or control request in a timely fashion.
Install a Windows service using a Windows command prompt?和中的信息
从可执行文件创建 Windows 服务 不起作用。
如何成功启动Windows服务?
Srvany.exe
是一个古老的程序,据我所知,它可以工作到 Windows 2003 年。你可以忘记它在 Windows 7/10 之前就存在了。
到 start/stop Windows 7 月 10 日的服务(我正在使用 Acronis 服务),其服务名称通常与显示名称完全不同:
正在停止 运行ning 服务:
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
正在启动 运行ning 服务:
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"
这只会创建服务并将记录添加到 Registry/serviceDB。您需要检查 exe 文件本身。
您不需要 obj=LocalSystem 因为这是默认选项。不要在等号 =
和值之间创建空格!
您检查过事件查看器了吗?启动服务时它说什么?只有超时? myprog.exe
是否在不作为服务的情况下单独工作?请回答这些问题,我会编辑答案。
根据评论编辑 1 和 2 如果您对上述方法有任何困难
有一个名为 SrvStart (originally from 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
在您关闭服务时强制关闭任何打开的 windows。
然后将 *.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
之间没有反斜杠(\
)是正确的。
现在检查您的服务,您应该在那里看到“我的服务”名称,它应该像服务一样工作。
根据@CodenameK 的评论编辑 3
显然你需要编译 SrvStart 120 版本,它可以用 VS2017 编译以使其 运行 正确 @Win10。唯一可用的版本是旧的 1.1 版本,它在 Win10 上似乎无法正常工作。
适用于 CodenameK 的解决方案是使用 NSSM - the Non-Sucking Service Manager。以备日后有需要者参考。
根据 How to Create a User-Defined Service,您可以使用 Windows NT Resource Kit 创建一个 Windows 服务。比如上图link:
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 服务。当我尝试开始时收到此消息:
Windows could not start the OrchestrateIT Import Service service on Local Computer.
Error 1053: The service did not respond to the start or control request in a timely fashion.
Install a Windows service using a Windows command prompt?和中的信息 从可执行文件创建 Windows 服务 不起作用。
如何成功启动Windows服务?
Srvany.exe
是一个古老的程序,据我所知,它可以工作到 Windows 2003 年。你可以忘记它在 Windows 7/10 之前就存在了。
到 start/stop Windows 7 月 10 日的服务(我正在使用 Acronis 服务),其服务名称通常与显示名称完全不同:
正在停止 运行ning 服务:
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
正在启动 运行ning 服务:
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"
这只会创建服务并将记录添加到 Registry/serviceDB。您需要检查 exe 文件本身。
您不需要 obj=LocalSystem 因为这是默认选项。不要在等号 =
和值之间创建空格!
您检查过事件查看器了吗?启动服务时它说什么?只有超时? myprog.exe
是否在不作为服务的情况下单独工作?请回答这些问题,我会编辑答案。
根据评论编辑 1 和 2 如果您对上述方法有任何困难
有一个名为 SrvStart (originally from 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
在您关闭服务时强制关闭任何打开的 windows。然后将
*.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
之间没有反斜杠(\
)是正确的。现在检查您的服务,您应该在那里看到“我的服务”名称,它应该像服务一样工作。
根据@CodenameK 的评论编辑 3
显然你需要编译 SrvStart 120 版本,它可以用 VS2017 编译以使其 运行 正确 @Win10。唯一可用的版本是旧的 1.1 版本,它在 Win10 上似乎无法正常工作。
适用于 CodenameK 的解决方案是使用 NSSM - the Non-Sucking Service Manager。以备日后有需要者参考。