可以使用命令提示符 Shell 中的两个命令来停止和启动服务。
- 网络启动服务“某些服务”
- sc 启动“某些服务”
这些命令有什么区别?
答案1
在 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
答案2
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 都无法满足成功条件
答案3
不管怎样,我发现 sc start/stop 比 net start/stop 更可靠。有时 net start/stop 会导致服务卡在正在启动/正在停止状态,而使用 sc start/stop 时我从未遇到过这种情况。如果服务被终止(通过 taskkill),例如在 taskkill 之后尝试使用 net start 启动服务,则 net start/stop 症状往往会更频繁地出现。
答案4
剩下要说的是,如果服务的 OnStart() 例程花费的时间太长,则NET START
向服务发送停止命令并返回以下错误:
ServiceName 服务正在启动........
无法启动 ServiceName 服务。
服务没有报告错误。
输入 NET HELPMSG 3534 即可获得更多帮助。
尽管服务已成功启动并停止,但仍然会发生这种情况!
我还在这里发现了这篇文章,可能很有趣: 服务无法启动