HTTP-Dienste können nicht beendet werden, wenn der Microsoft-Webbereitstellungsdienst installiert ist

Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem Sie HTTP-Dienste nicht mit dem BEFEHL NET STOP HTTP beenden können, wenn microsoft Web Deployment Service (MSDEPSVC) installiert ist.

Ursprüngliche Produktversion: Microsoft-Webbereitstellungsdienst
Ursprüngliche KB-Nummer: 2597817

Problembeschreibung

Stellen Sie sich folgendes Szenario vor: Sie versuchen, den HTTP-Dienst auf einem Server zu beenden, auf dem Iis 6, 7 oder 7.5 ausgeführt wird. Auf dem Server ist auch der Microsoft-Webbereitstellungsdienst (MSDEPSVC) installiert. Wenn Sie versuchen, den HTTP-Dienst mithilfe der NET STOP HTTP Befehlszeilenanweisung zu beenden, wird die folgende Fehlermeldung in der Eingabeaufforderung angezeigt:

Der HTTP-Dienst wird beendet.....
Der HTTP-Dienst konnte nicht beendet werden.

Wenn Sie den NET STOP HTTP Befehl erneut ausführen, wird die folgende Meldung angezeigt:

Der Dienst wird gestartet oder beendet. Versuchen Sie es später noch mal.

Ursache

Dieses Problem tritt auf, weil der Microsoft-Webbereitstellungsdienst (MSDEPSVC) vom HTTP-Dienst abhängt, aber bei der ersten Installation von MSDEPSVC diese Abhängigkeit nicht beim Dienststeuerungs-Manager registriert ist. Wenn HTTP versucht, zu beenden, muss es auch seine abhängigen Dienste beenden. HTTP ist sich jedoch nicht bewusst, dass MSDEPSVC aufgrund der nicht registrierten Abhängigkeit beendet werden muss, sodass die Dienstunterbrechung fehlschlägt.

Lösung

Um dieses Problem zu beheben, kopieren Sie das folgende Skript, und führen Sie es als PowerShell-Skript auf dem Server aus. Das Skript stellt sicher, dass alle Abhängigkeiten des HTTP-Diensts ordnungsgemäß registriert sind.

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

Testen Sie, ob das Problem behoben ist. Wenn das Problem beseitigt ist, sind Sie mit diesem Abschnitt fertig. Wenn das Problem noch nicht behoben ist, wenden Sie sich an den Support.

References

Weitere Informationen zum Webbereitstellungstool finden Sie unter Web Deploy 3.6.