从可执行文件创建Windows服务


349

在给定可执行文件的情况下,是否有任何快速方法来创建Windows服务,该服务在启动时将其启动?


8
是Microsoft有关如何实现此目的的说明。
PiRX

Answers:


460

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

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

您必须在实际exe路径周围加上引号,并在后面加上一个空格binPath=

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

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

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

有一些工具可以从任意的非服务可执行文件创建Windows服务,有关此类工具的示例,请参见其他答案。


11
您(几乎可以肯定)必须以管理员身份运行命令提示符才能使此命令起作用
Jeutnarg '16

2
该路径也必须是完全限定的路径-我无法通过使用相对路径来启动我的服务。
RunOfTheShipe

4
binpath=至少对于Windows 10,至少必须在Windows 10 后面加上空格用双引号引起来的可执行路径是完全错误的。只有且仅当路径包含特殊字符(如空格)时,才需要使用引号。同样,在变量名中,大小写(大小写/小写/混合大小写)也无处不在,这displayname="my service"是在创建服务以查看为第一行(Name)时在命令行中传递的另一个好东西services.msc

2
binPath=在Windows 7而非Windows 10上对我来说是必需的空格
datchung

242

使用NSSM(非吮吸服务管理器)将.BAT或任何.EXE文件作为服务运行。

http://nssm.cc/

  • 步骤1:下载NSSM
  • 第2步:使用以下命令安装服务nssm.exe install [serviceName]
  • 步骤3:这将打开一个GUI,您将用它来找到可执行文件

6
有史以来最好的服务经理。我什至设法让PlexWatch使用NSSM作为服务安装。
势在必行的2014年

2
这套是永远的服务吗?Windows每次启动时服务都会启动吗?还可以在没有用户交互的情况下怎么做?某种脚本或代码?
约翰·德米特里

9
绝对好,我希望我能接受这个答案,而不是第一个答案:-(
德国拉托雷(Latorre)

2
我可以在服务器上将Dropbox作为服务运行。绝对不是吸吮工具!
Barry Guvenkaya

1
exe文件是否必须是Windows服务项目,才能与nssm一起使用,或者它可以是普通的exe文件?,因为当我使用nssm start [servicename]时,它会显示错误,例如Windows服务无法从命令提示符等
Sanjeev

92

扩展(Kevin Tong)答案。

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

步骤2:从命令行输入:

C:\> nssm.exe install [servicename]

它将打开如下所示的GUI(示例为UT2003服务器),然后只需将其浏览至:yourapplication.exe

在此处输入图片说明

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


4
正确的语法nssm.exe install [serviceName]。此解决方案有效,但是如果您有GUI应用程序,则在Win Serever2003上将无法使用。如果您以后要删除它,请使用nssm.exe remove [youservicename]
Hammad Khan

1
我假设对nginx的引用是因为那是您要作为服务运行的特定程序?直到我在上面看到hmd的评论之前,我以为您试图通过暗示nginx是安装所需的依赖项或其他东西来提供帮助...但是在GUI中,您好像没有安装nginx,而是在安装虚幻竞技场服务器?仅指出该示例是不一致的,并且可能会引起误解。一个简单的“假设您想将nginx作为服务安装,那么它将看起来像这样:”会有所帮助。
flutefreak7年7

@ flutefreak7是nginx没有必要的,并且具有误导性。如果没有该命令,该命令也将起作用。如果要在命令提示符下提供服务名称,则它是可选参数。
哈马德·汗

1
当我尝试使用nssm时,我的Windows Forms up正在运行,但是未显示form ...为什么?
Radenko Zec 2015年

它以Windows服务的形式运行您的应用程序,大多数用于后端。也可能是它以另一个root / admin用户名运行。你必须检查一下。另外,您可以在这里查看更多信息:nssm.cc/usage

16

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

针对上述情况,我创建了serman,这是一个命令行工具,用于将可执行文件安装为服务。您只需要编写(并且只编写一次)便是一个简单的服务配置文件以及可执行文件。跑

serman install <path_to_config_file>

将安装该服务。stdoutstderr全部记录下来。有关更多信息,请访问项目网站

有效的配置文件非常简单,如下所示。但是它也具有许多有用的功能,例如<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>

9

这些附加功能非常有用..需要以管理员身份执行

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

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


没有安装命令,也没有我的My Win 2003 sc.exe 5.2.3790.3959,也没有M $ F1
user6698332 '19

1
使用“创建”而不是“安装”。sc create <service_name> binpath= <binary_path>
CSquard

4

我为此测试了一个好的产品:AlwaysUp。不是免费的,但是他们有30天的试用期,因此您可以尝试一下...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.