如何在Windows上使用特定的启动参数启动服务

如何使用特定参数启动服务? 在另一个问题,我发现

净开始servicename等等

但是如果我尝试这个, net抛出一个语法错误在我身上。

我究竟做错了什么?

编辑:澄清net start servicename工作得很好,但我需要传递参数的服务。 我可以通过在启动服务之前填入start参数来在services.msc手动执行此操作。 但是,我怎样才能从脚本中做到这一点?

另一个编辑:对不起,但我的问题是误导 。 在我的testing中,我有更多的参数,而不是/blah net start抱怨。 事实上, 任何以斜杠开头的东西都可以 。 所以net start servicename /blah works, net start servicename blah不起作用。 由于我需要net start servicename /foo bar ,这是问题的net start servicename /foo bar

  sc开始fooservice arg1 arg2 ... 

据我所知, NET START不会允许你传递任意参数(它似乎必须以/为前缀),我相信正确的方法是修改相应的registry项并停止/启动服务。 假设您的自定义服务被称为MyService:

 [HKLM\SYSTEM\CurrentControlSet\Services\MyService] "ImagePath":C:\Projects\MyService\bin\MyService.exe Parameter1 Parameter2 

实际上,更好的方法是将您的configuration存储在服务器知道的地方,比如registry或文件系统,然后读取您需要的任何值。 正如你所看到的自定义命令行比应该更痛苦一点。

如果这是偶然的一个.NET开发的服务,你可以在你的文件系统上创buildn个可执行文件副本,并且每个副本都从相应的app.config文件中自动获取参数。

这听起来像你可能在Win32框外走得太远了。 由于这听起来像是自定义开发,所以其他提供的解决scheme,或许不是你理想的,可以正常工作,并且是更安全的方式。

使用net start时, 每个参数前需要一个斜线。 还要确保引用有空格的参数。

 net start servicename /param0 /"param1 with spaces" /"/param2_has_slash" 

您需要使用控制面板,服务中显示的实际服务名称。 如果它包含空格,则必须在服务名称周围加引号。

要获得实际的服务名称,只需在命令提示符下键入net start不带任何参数。 它应该给你一个所有正在运行的服务的列表,以便你可以得到实际的服务名称。 然后使用net start <servicename>

InstSrv和SrvAny可以帮助吗? 指南和链接