“Net start service” e “sc start”. Qual é a diferença?

70

Os serviços podem ser interrompidos e iniciados usando dois comandos no Shell do Prompt de Comando.

  1. serviço de início líquido "algum serviço"
  2. sc start "algum serviço"

qual é a diferença entre esses comandos?

Starx
fonte

Respostas:

81

No Windows NT, os dois comandos acessam o mesmo Service Manager. A diferença está principalmente na parte visível ao usuário:

  • net é mais antigo - desde os dias do MS-DOS e OS / 2, de fato.

    scapareceu apenas no Windows NT (não tenho certeza de qual versão) .

  • net só pode iniciar, parar e pausar serviços.

    sc possui controles mais avançados, pode consultar o estado, criar e excluir serviços, alterar sua configuração e segurança: sc config beep start= demand

  • net só funciona localmente.

    sc pode ser usado através da rede: sc \\snow start rpcapd

  • net aceita nomes para exibição: net start "Windows Firewall"

    sc sempre requer um nome de serviço: sc start SharedAccess

gravidade
fonte
82

A resposta do Grawity é certamente útil, mas eu encontrei uma diferença fundamental entre esses comandos detalhados em http://cbfive.com/command-line-service-management-net-v-sc/ . Em particular, esta página observa que esses dois comandos diferem em seu tempo : "net" é síncrono e "sc" é assíncrono.

O SC envia o controle ao serviço e retorna ao prompt de comando. Isso normalmente resulta em SC START retornando o serviço em um estado de START_PENDING. O NET START aguardará o serviço que está começando a entrar em um estado totalmente iniciado antes de retornar o controle no prompt de comando.

...

[L] ike SC START, SC STOP não espera o serviço parar e sempre retornará STOP_PENDING para muitas operações de parada de serviço. NET STOP, por outro lado, aguardará a interrupção do serviço antes de retornar ao prompt de comando.

...

NET e SC têm idéias diferentes do que consideram condições de sucesso. A pergunta que o SC pede para determinar se foi bem-sucedida é: "Enviei com êxito um controle de parada para o serviço?" A NET faz a pergunta: “O serviço que eu tentei parar, retornou que parou com êxito?” Se o fez, satisfez a condição. Caso contrário, não importa qual seja o motivo, o NET falhará na condição bem-sucedida

Mattias Andersson
fonte
11
Um detalhe interessante, este. Pode ser útil saber sobre casos de script (variável% ERRORLEVEL%). Obrigado.
Sopalajo de Arrierez 13/03
11
esta resposta é super útil para mim, pois estou enfrentando erros de script intermitentes tentando limpar o diretório de serviço depois de interrompê-lo, pois ele não está totalmente parado.
johntrepreneur
Eu quero usar "sc config", isso é assíncrono também? existe uma maneira de um arquivo em lotes aguardar até que a tarefa seja realmente concluída?
peter
3

Pelo que vale, achei sc start / stop mais confiável que o net start / stop. Às vezes, o net start / stop fazia com que o serviço ficasse travado no estado de partida / parada, enquanto isso nunca me ocorreu com sc start / stop. O sintoma de início / parada da rede tende a ocorrer com mais frequência se o serviço foi interrompido (via habilidade), por exemplo, tentar iniciar o serviço com partida líquida após a tarefa.

Jay
fonte
2

Falta dizer que, se a rotina OnStart () de um serviço demorar muito, NET STARTenvia um comando de parada para o serviço e retorna o seguinte erro:

O serviço ServiceName está iniciando ........

O serviço ServiceName não pôde ser iniciado.

O serviço não relatou um erro.

Mais ajuda está disponível, digitando NET HELPMSG 3534.

Isso acontece embora o serviço tenha sido iniciado e interrompido com sucesso!

Também encontrei este post aqui, que pode ser interessante: O serviço não pôde ser iniciado

Lumo
fonte