Non è possibile arrestare i servizi HTTP quando è installato il servizio di distribuzione Web Microsoft

Questo articolo consente di risolvere il problema per cui non è possibile arrestare i servizi HTTP usando il comando HTTP NET STOP quando è installato il servizio di distribuzione Web Microsoft (MSDEPSVC).

Versione originale del prodotto: Servizio di distribuzione Web Microsoft
Numero KB originale: 2597817

Sintomi

Considerate il seguente scenario: Si sta tentando di arrestare il servizio HTTP in un server che esegue Internet Information Services (IIS) 6, 7 o 7.5. Nel server è installato anche il servizio di distribuzione Web Microsoft (MSDEPSVC). Quando si tenta di arrestare il servizio HTTP usando l'istruzione NET STOP HTTP della riga di comando, al prompt dei comandi viene visualizzato il messaggio di errore seguente:

Il servizio HTTP si sta arrestando.....
Impossibile arrestare il servizio HTTP.

Se si esegue di nuovo il NET STOP HTTP comando, viene visualizzato il messaggio seguente:

Il servizio viene avviato o arrestato. Riprovare più tardi.

Causa

Questo problema si verifica perché il servizio di distribuzione Web Microsoft (MSDEPSVC) dipende dal servizio HTTP, ma quando MSDEPSVC viene installato inizialmente tale dipendenza non è registrata con Gestione controllo servizi. Quando HTTP tenta di arrestarsi, deve arrestare anche i servizi dipendenti. Tuttavia, HTTP non è consapevole della necessità di arrestare MSDEPSVC a causa della dipendenza non registrata e pertanto l'arresto del servizio non riesce.

Risoluzione

Per risolvere il problema, copiare lo script seguente ed eseguirlo come script di PowerShell nel server. Lo script garantisce che tutte le dipendenze del servizio HTTP siano registrate correttamente.

$bFoundHttp = $false
$msdepsvc = Get-Service -name MsDepSvc
$reqsvcs = "HTTP"
$msdepsvc.ServicesDependedOn | ForEach-Object `
{
    if($_.Name -eq "HTTP")
    {
      $bFoundHttp = $true
    }
    else
    {
    if($_.Name -ne "")
     {
       $reqsvcs += "/" + $_.Name
     }
    }
}
if ($bFoundHttp -eq $false)
{
    $status = $msdepsvc.Status
    if($status -eq "Running")
    {
      Stop-Service -name MsDepSvc
    }

    sc.exe config MsDepSvc depend= $reqsvcs
    if($status -eq "Running")
    {
      Start-Service -name MsDepSvc
    }
}

Verificare se il problema è stato risolto. Se il problema è stato risolto, non occorre leggere il resto della sezione. Se il problema persiste, è possibile contattare il Supporto tecnico.

Riferimenti

Per altre informazioni sullo strumento di distribuzione Web, vedere Distribuzione Web 3.6.