Los servicios HTTP no se pueden detener cuando se instala el servicio de implementación web de Microsoft

Este artículo le ayuda a resolver el problema por el que no puede detener los servicios HTTP mediante el comando NET STOP HTTP cuando se instala el servicio de implementación web de Microsoft (MSDEPSVC).

Versión original del producto: Servicio de implementación web de Microsoft
Número de KB original: 2597817

Síntomas

Imagina la siguiente situación: Está intentando detener el servicio HTTP en un servidor que ejecuta Internet Information Services (IIS) 6, 7 o 7.5. El servidor también tiene instalado el servicio de implementación web de Microsoft (MSDEPSVC). Al intentar detener el servicio HTTP mediante la instrucción de línea NET STOP HTTP de comandos, se muestra el siguiente mensaje de error en el símbolo del sistema:

El servicio HTTP se está deteniendo.....
No se pudo detener el servicio HTTP.

Si vuelve a ejecutar el NET STOP HTTP comando, se muestra el mensaje siguiente:

El servicio se está iniciando o deteniendo. Inténtelo de nuevo más tarde.

Causa

Este problema se produce porque el servicio de implementación web de Microsoft (MSDEPSVC) depende del servicio HTTP, pero cuando MSDEPSVC se instala inicialmente, esa dependencia no está registrada con Service Control Manager. Cuando HTTP intenta detenerse, también debe detener sus servicios dependientes. Sin embargo, HTTP no es consciente de que necesita detener MSDEPSVC debido a la dependencia no registrada y, por lo tanto, se produce un error en la página de detención del servicio.

Solución

Para resolver este problema, copie el siguiente script y ejecútelo como script de PowerShell en el servidor. El script garantizará que todas las dependencias del servicio HTTP estén registradas correctamente.

$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
    }
}

Compruebe si se ha solucionado el problema. Si se ha solucionado, ya ha terminado con esta sección. En caso contrario, puede comunicarse con el soporte técnico.

Referencias

Para obtener más información sobre la herramienta de implementación web, consulte Web Deploy 3.6.