“网络启动服务”和“ sc启动”。有什么区别?


70

可以使用命令提示符Shell中的两个命令来停止和启动服务。

  1. 净启动服务“某些服务”
  2. sc启动“某些服务”

这些命令有什么区别?

Answers:


80

在Windows NT中,两个命令都访问相同的服务管理器。区别主要在于用户可见部分:

  • net 实际上是更老的–从MS-DOS和OS / 2时代开始。

    sc仅与Windows NT一起出现(不确定哪个版本)

  • net 只能启动,停止和暂停服务。

    sc 具有更多高级控件,可以查询状态,创建和删除服务,更改其配置和安全性: sc config beep start= demand

  • net 仅在本地工作。

    sc 可以通过网络使用: sc \\snow start rpcapd

  • net 接受显示名称: net start "Windows Firewall"

    sc 始终需要一个服务名称: sc start SharedAccess


82

Grawity的回答当然很有帮助,但是我发现这些命令之间的根本区别在http://cbfive.com/command-line-service-management-net-v-sc/上有详细说明。特别是,该页面指出这两个命令的时序有所不同:“ net”是同步的,“ sc”是异步的。

SC将控件发送到服务,然后返回到命令提示符。 这通常会导致SC START在START_PENDING状态下返回服务。 NET START将等待它开始进入完全启动状态的服务,然后在命令提示符下返回控制权。

...

[如] SC START,SC STOP不等待服务停止, 并且通常会在许多服务停止操作中返回STOP_PENDING。 另一方面,NET STOP将等待服务停止, 然后再返回到命令提示符。

...

NET和SC对于成功条件有不同的想法。 SC询问确定它是否成功的问题是:“我是否已成功向服务发送停止控制?”如果这样做,则不管服务是否停止,我都满足成功条件。NET提出一个问题,“我尝试停止的服务是否返回,它成功停止了?”如果这样做,则表示满足条件。如果不是,无论是什么原因,NET都不会成功


1
一个有趣的细节,这个。对于脚本编写情况(%ERRORLEVEL%变量)可能很有用。谢谢。
Sopalajo de Arrierez,2014年

1
这个答案对我非常有帮助,因为我遇到间歇性脚本错误,试图在停止服务目录后清理服务目录,因为它没有完全停止。
johntrepreneur 2014年

我想使用“ sc config”,也是异步的吗?有没有一种批处理文件可以等待任务实际完成的方法?
彼得2014年

3

对于它的价值,我发现sc启动/停止比净启动/停止更可靠。有时,网络启动/停止导致服务停留在“启动/停止”状态,而对于我来说,使用sc启动/停止从未发生过。如果服务被杀死(通过taskkill),则网络启动/停止症状往往会更频繁地发生,例如,尝试在taskkill之后使用网络启动来启动服务。


2

不用说,如果服务的OnStart()例程花费的时间太长,则NET START向该服务发送停止命令,并返回以下错误:

ServiceName服务正在启动........

ServiceName服务无法启动。

该服务未报告错误。

键入NET HELPMSG 3534,可以获得更多帮助。

尽管服务已成功启动和停止,但仍会发生这种情况!

我还在这里找到了这篇帖子,可能很有趣: 服务无法启动

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.