有没有办法使用批处理文件启用和禁用Windows服务。 我说的是更改服务的启动类型,即启用和禁用,而不是使用Net Start和Net Stop命令启动和停止。
答案 0 :(得分:18)
sc config <service_name> start= disabled
此命令有许多功能,但其中一个用于确定系统启动时的服务状态。可以将服务设置为自动运行,手动运行或根本不运行。命令是
sc config ServiceName start= flag
此处ServiceName是服务的名称,标志的值为auto,demand之一。或者禁用。例如,要将服务设置为手动运行,该命令为
sc config ServiceName start= demand
请注意,等号后面必须有空格。参数ServiceName的正确值可能并不总是很明显,下一个命令可用于为所有服务查找它。
答案 1 :(得分:4)
sc config <service_name> start= disabled
答案 2 :(得分:1)
我有一个答案和一个问题。 我已将这一行放在一起以禁用正在运行的服务
sc query "wsearch"| find "RUNNING" >nul 2>&1 && net stop "wsearch" && sc config "wsearch" start= disabled
这将在尝试禁用和停止之前检查服务。有些我想改用手册。
有人可以帮我把这个片段放到循环中
for loop sc query "wsearch"| find "RUNNING" >nul 2>&1 && net stop "wsearch" && sc config "wsearch" start= disabled
servicename1 servicename2 servicename3 ENDIF .....
通过这种方式,我可以创建一个细分,并在一个文件中输入我想要更改状态的所有服务。
答案 3 :(得分:0)
sc \\servername config <service_name> Start= auto >> c:\temp\sc.txt
更改服务的开始类型,并将输出记录在c:\temp\sc.txt
。
sc \\servername start <service_name> >> c:\temp\sc1.txt
启动服务并将输出记录在c:\temp\sc.txt
。
答案 4 :(得分:0)
我知道这有点晚了,但是对于今后可能遇到这个问题的人来说,这是我用DB后端编写的一个小应用程序片段,构建数组,循环遍历并发送
For SrvLoop As Integer = 0 To UBound(SrverName) - 1
services = ServiceController.GetServices(SrverName(SrvLoop))
For Each ChkLV In myobj.Items
Srv = ChkLV.SubItems(3).Text
i = ChkLV.SubItems(0).Text
If ChkLV.Selected = True And Srv = SrverName(SrvLoop) Then
Select Case Command
Case 1
If services(i).Status <> ServiceControllerStatus.Running Then
services(i).Start()
Else
MsgBox("Cannot Start a Service that is already Running", MsgBoxStyle.Information)
End If
Case 2
'If services(i).CanStop Then
If services(i).Status <> ServiceControllerStatus.Stopped Then
services(i).Stop()
'Else
' If services(i).Status <> ServiceControllerStatus.Stopped Then
' MsgBox("Service not able to be stopped currently" & vbCrLf & "Please try again in a few seconds", MsgBoxStyle.Information)
' End If
End If
End Select
Progress.PB_Progress_Bar.Value += 1
End If
Next
Next
Progress.Dispose()