12

有没有办法使用批处理文件启用和禁用 Windows 服务。我说的是更改服务的启动类型,即启用和禁用,而不是使用 Net Start 和 Net Stop 命令启动和停止。

4

5 回答 5

24
sc config <service_name> start= disabled

此命令有许多功能,但其中一个是在系统启动时确定服务的状态。可以将服务设置为自动运行、手动运行或根本不运行。命令是

sc config ServiceName start= flag

这里 ServiceName 是服务的名称,flag 的值是 auto、demand 之一。或禁用。例如,要将服务设置为手动运行,命令是

sc config ServiceName start= demand

请注意,等号后面必须有一个空格。参数 ServiceName 的正确值可能并不总是显而易见的,可以使用下一条命令为所有服务找到它。

于 2012-11-01T06:12:43.293 回答
5
sc config <service_name> start= disabled
于 2012-11-01T06:06:59.807 回答
2

我有一个答案和一个问题。我已将这一行放在一起以禁用正在运行的服务

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.....

这样,我可以创建一个片段并在一个文件中输入我想要更改状态的所有服务。

于 2015-12-01T18:49:36.200 回答
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.

于 2014-11-19T15:18:40.907 回答
0

我认为这有点晚了,但是对于将来可能遇到此问题的任何人,这是我用数据库后端编写的一个小应用程序片段,构建数组,循环遍历它并发送

   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()
于 2017-02-27T18:12:25.743 回答