从可执行文件创buildWindows服务

有没有什么快捷的方法,给一个可执行文件,创build一个Windows服务,启动时,启动它?

要从可执行文件创buildWindows服务,可以使用sc.exe

 sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>" 

您必须在实际的exepath和binPath=之后有一个空格。

有关sc命令的更多信息,请参见Microsoft KB251192 。

请注意,它不适用于任何可执行文件:可执行文件必须是Windows服务( 即实现ServiceMain )。 在将非服务可执行文件注册为服务时,尝试启动服务时会出现以下错误:

错误1053:该服务没有及时响应启动或控制请求。

有一些工具可以从任意的非服务可执行文件创build一个Windows服务,查看这些工具的例子的其他答案。

使用NSSM( 非Sucking服务pipe理器 )作为服务运行.BAT或任何.EXE文件。

http://nssm.cc/

它适用于我:)

(Kevin Tong)回答。

第1步:下载并解压缩nssm-2.24.zip

第二步:从命令行input:

C:\> nssm.exe install [servicename]

它将打开如下所示的GUI(示例是UT2003服务器),然后将其简单浏览到:yourapplication.exe

在这里输入图像描述

有关更多信息: https : //nssm.cc/usage

许多现有的答案包括安装时的人为干预。 这可能是一个容易出错的过程。 如果你想将许多可执行文件作为服务来安装,最后要做的就是在安装时手动执行它们。

针对上述情况,我创build了serman ,一个命令行工具将可执行文件安装为服务。 所有你需要写的(只写一次)是一个简单的服务configuration文件以及你的可执行文件。 跑

 serman install <path_to_config_file> 

将安装该服务。 stdoutstderr都被logging下来。 有关更多信息,请查看项目网站 。

工作configuration文件非常简单,如下所示。 但它也有许多有用的function,如下面的<env><persistent_env>

 <service> <id>hello</id> <name>hello</name> <description>This service runs the hello application</description> <executable>node.exe</executable> <!-- {{dir}} will be expanded to the containing directory of your config file, which is normally where your executable locates --> <arguments>"{{dir}}\hello.js"</arguments> <logmode>rotate</logmode> <!-- OPTIONAL FEATURE: NODE_ENV=production will be an environment variable available to your application, but not visible outside of your application --> <env name="NODE_ENV" value="production"/> <!-- OPTIONAL FEATURE: FOO_SERVICE_PORT=8989 will be persisted as an environment variable to the system. --> <persistent_env name="FOO_SERVICE_PORT" value="8989" /> </service> 

这些附加certificate是有用的..需要作为pipe理员执行

 sc install <service_name> binpath=<binary_path> sc stop <service_name> sc queryex <service_name> sc delete <service_name> 

如果您的服务名称有任何空格,请用“引号”括起来。

我已经testing了一个好的产品: AlwaysUp 。 不是免费的,但他们有一个30天的试用期,所以你可以试试看…

由于某些原因,我无法使用NSSM覆盖可执行目录的path。

这是我所做的服务指向正确的可执行文件。

SC CONFIG YourServiceName binPath =“C:\ SomeDirectory \ YourFile.EXE” 有关更多详细信息