安装 Microsoft Web 部署服务时,无法停止 HTTP 服务

本文可帮助你解决安装 Microsoft Web 部署服务 (MSDEPSVC) 时,无法使用 NET STOP HTTP 命令停止 HTTP 服务的问题。

原始产品版本: Microsoft Web 部署服务
原始 KB 数: 2597817

症状

请考虑以下应用场景: 您尝试在运行 Internet Information Services (IIS) 6、7 或 7.5 的服务器上停止 HTTP 服务。 服务器还安装了 Microsoft Web 部署服务 (MSDEPSVC) 。 尝试使用 NET STOP HTTP 命令行指令停止 HTTP 服务时,命令提示符中会显示以下错误消息:

HTTP 服务正在停止.....
无法停止 HTTP 服务。

如果再次运行 NET STOP HTTP 命令,将显示以下消息:

服务正在启动或停止。 请稍后重试。

原因

出现此问题的原因是 Microsoft Web 部署服务 (MSDEPSVC) 依赖于 HTTP 服务,但在最初安装 MSDEPSVC 时,依赖项不会注册到服务控制管理器。 当 HTTP 尝试停止时,它也需要停止其依赖服务。 但是,由于未注册的依赖项,HTTP 不知道它需要停止 MSDEPSVC,因此服务停止失败。

解决方案

若要解决此问题,请复制以下脚本,并将其作为 PowerShell 脚本在服务器上运行。 该脚本将确保正确注册 HTTP 服务的所有依赖项。

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

检查问题是否已修复。 如果问题已修复,您不用再往下看了。 如果问题没有修复,你可以联系技术支持部门

References

有关 Web 部署工具的详细信息,请参阅 Web 部署 3.6