【问题标题】:"Unable to launch the IIS Express Web server." in Visual Studio“无法启动 IIS Express Web 服务器。”在 Visual Studio 中
【发布时间】:2015-05-20 21:31:37
【问题描述】:

我试图通过 Visual Studio 运行我的 Web 服务。我遇到了这样的问题:

---------------------------
Microsoft Visual Studio
---------------------------
Unable to launch the IIS Express Web server.

Failed to register URL "http://localhost:63591/" for site "xxxxxx" application
"/". Error description: The process cannot access the file because it is being
used by another process. (0x80070020)

---------------------------
OK   
---------------------------

我看到任务管理器发现PID 4被System使用,它的Description是NT Kernel & System. 所以我试图阻止http service。 所有依赖服务都停止了。但是我在停止 http 服务时遇到了问题,比如

The service is starting or stopping.  Please try again later.

所以,我尝试手动停止和启动服务。但是 End 进程被禁用。 如果有人可以帮助解决这个问题,将会很有帮助

【问题讨论】:

标签: visual-studio iis-express


【解决方案1】:

解决方案要容易得多。只需转到状态栏,查找 IIS express 图标并停止站点。 解决方法在这里:https://stackoverflow.com/a/69841149/8390589

【讨论】:

    【解决方案2】:

    这确实发生在安装Docker之后。

    解决步骤

    1. Resource Monitor下勾选Network

      • Port 66666 未被任何网络进程使用。
    2. 试图退出Docker Desktop

      • Port 66666 仍然不可用。
    3. 检查排除的端口范围netsh interface ipv4 show excludedportrange protocol=tcp

      • 端口确实在Exclusion Ranges
    4. 尝试在Turn Windows Features On and Off中取消勾选Hyper-V

      • Turn Windows Features On and Off 中找不到Hyper-V
    5. 已尝试从排除范围中删除端口
      netsh int ipv4 add excludedportrange protocol=tcp startport=66666 numberofports=1 store=persistent

      • 失败,结果Element Not Found
    6. link启发,尝试重启网络服务

      1. net stop winnat
        • 运行此命令后,通过运行netsh interface ipv4 show excludedportrange protocol=tcp 确认port 66666 已从Exclusion Ranges 消失
      2. 停止其他网络服务只是为了更放心
        • net stop LanmanWorkstation
        • net stop WlanSvc
        • net stop WwanSvc
      3. 重启网络服务
        • net start WwanSvc
        • net start WlanSvc
        • net start LanmanWorkstation
        • net start winnat
    7. 确认不可用端口现在可用

      1. netsh interface ipv4 show excludedportrange protocol=tcp
        • Port 66666 不再在 Exclusion Ranges
      2. IIS Express Web Server可以启动成功。
    8. 再次启动 Docker

      • port 6666 仍然可以使用。

    希望这对任何人都有帮助。

    【讨论】:

      【解决方案3】:

      我的网站运行良好,然后无缘无故开始出现此错误。我打开了很多东西(包括几个 VS 项目)并且不想重新启动。我也不想在这些解决方案上浪费时间,所以我只是更改了项目属性的项目 URL 上的端口号...立即成功。

      【讨论】:

        【解决方案4】:

        IIS Express 无法在 Visual Studio 中启动解决方案

        • 进入任务管理器
        • 搜索“Application Frame Host”进程
        • 结束此进程
        • 再次尝试运行

        If not successful, Try run this command in cmd: "net stop winnat"

        【讨论】:

          【解决方案5】:

          安装 IIS 的组件似乎可以解决问题

          就我而言,最简单的解决方案(并且一直有效)是尝试从 Windows 10 安装 IIS 组件(例如 FTP 服务器)。这可以通过转到Control panel -> Program & features -> Turn Windows features On or Off,然后打开 IIS 组件来完成。

          奇怪的是,即使错误与 IIS Express Web 服务器(而不是 IIS)有关,但安装了一个额外的 IIS 组件,它显然会改变系统中的某些内容。之后,系统又恢复了功能。

          我已经尝试了数百万种方法,但似乎该端口并未被其他应用程序以某种方式保留,也不是某种防火墙问题。

          我观察到这个问题是在安装或打开网络相关应用程序时弹出的。例如更新我的 Docker Desktop 应用程序、安装 VMWare WorkstationHyper-V 活动(如运行 VM)等. 我没有指出确切的原因,但我知道这些是相关的。

          【讨论】:

            【解决方案6】:

            我用的是VS2019 Version 16.10.0 Preview 2.0,刚到这里:

            未选中 Enable SSL => 保存 => 重新检查 => 保存。

            【讨论】:

              【解决方案7】:

              对我有用的解决方案是,

              要解决此问题,您必须暂时禁用 winnat 服务,只需运行此命令即可完成(必须以管理员身份运行)

              net stop winnat

              启动你的 docker 服务并再次启动 winnat

              net start winnat

              解决方案发布于http://www.herlitz.nu/2020/12/01/docker-error-ports-are-not-available-on-windows-10/

              【讨论】:

              • 点赞!但请注意,这可能会杀死 WSL 的网络功能,直到您重新启动
              【解决方案8】:

              此错误的原因是您为应用程序提供了错误的端口号。

              just use http ports for your application to run
              

              使用靠近 8080 号码的端口, 即:

              本地主机:8090

              在 Visual-Studio 中为您的应用程序更改端口

              goto project properties > web > Server > ProjectUrl
              

              【讨论】:

                【解决方案9】:

                在更新 Windows 10 和/或 Visual Studio 16+ 后,由于 internal bug 可能会发生 IISExpress 无法注册任何开发网站,因为它不再接受 localhost 连接。

                要解决此问题,您只需重新注册绑定即可。为此,请从管理 shell 运行以下命令:

                netsh http add iplisten ipaddress=:: 
                

                【讨论】:

                  【解决方案10】:

                  如果 netstat 没有显示任何已经在使用端口的东西

                  netstat -ano | findstr <your port number>

                  端口可能被排除,试试这个命令看看范围是否被其他东西阻塞:

                  netsh interface ipv4 show excludedportrange protocol=tcp

                  您可以尝试从多个端口的起始端口取消阻止范围(需要管理员的命令提示符):

                  netsh int ip delete excludedportrange protocol=tcp numberofports=<number of ports> startport=<start port>

                  对我来说,我无法取消阻止这些,我只是得到“访问被拒绝”,所以我最终不得不为我的网站选择另一个端口。

                  【讨论】:

                  • 除此之外别无其他。我可以看到范围包括我的端口号netsh interface ipv4 show excludedportrange protocol=tcp。很多时间都被浪费了,直到我发现它来解决它。非常感谢@john Leonard
                  【解决方案11】:

                  尝试在 Windows 10 上从 Visual Studio 2019 运行项目时,我遇到了类似的问题。 应用程序无法启动,因为该端口显然正被另一个进程使用。但是,netstat 命令显示该端口没有被任何应用程序使用。

                  在谷歌上搜索了 2 天后,我找到了一个适合我的解决方案。 我尝试使用的端口位于排除的端口范围内,您可以通过运行以下命令查看:

                  netsh interface ipv4 show excludedportrange protocol=tcp
                  

                  在我的例子中,保留这些端口的罪魁祸首是 Docker for Windows 和 Hyper-V

                  解决方案

                  我卸载了 Docker(因为我不需要它)并禁用了 Hyper-V。 要禁用 Hyper-V:转到:控制面板-> 程序和功能-> 打开或关闭 Windows 功能。 取消勾选 Hyper-V 并重新启动计算机。

                  重启后命令 netsh interface ipv4 show excludedportrange protocol=tcp 显示没有保留端口。

                  然后我通过从提升的命令行运行以下命令将我的应用程序的端口添加到排除的端口范围:

                  netsh int ipv4 add excludedportrange protocol=tcp startport=50403 numberofports=1 store=persistent
                  

                  然后我重新启用了 Hyper-V(如果需要可以重新安装 Docker)并再次重新启动计算机。

                  Hyper-V 现在保留了它的端口,而不会干扰我的应用程序使用的端口: Reserved Port Ranges

                  【讨论】:

                  • 这对我有用,但我需要 Docker,所以我只是在启动时禁用它而不是卸载它。
                  • 像@Cory 一样,我将我的端口更改为超出范围,这很烦人,因为现在我每次这样做时都必须更改引用应用程序,但比完全重启要好。
                  • 禁用 Hyper-V 并重新启动为我修复了它
                  • 我更改了端口,然后只需要运行以下命令即可使其工作,谢谢! netsh http 添加 urlacl url=localhost:49914 user=Everyone
                  • 另外更改项目使用的端口号可能“不太友好”。检查 here 以了解更改 http 和 https 端口号的解决方案(最后一个“技巧”仅适用于 https 端口号)。
                  【解决方案12】:
                  1. 关闭视觉工作室
                  2. 删除“.vs”文件夹
                  3. 尝试更改端口“localhost:8080”

                  它对我有用。

                  【讨论】:

                  • 工作就像魅力!
                  【解决方案13】:

                  我今天在 Visual Studio 2019 中遇到了这个问题,花了 3 个小时才终于解决了这个问题。 Visual Studio 使用 2 个文件来跟踪 SSL 端口号,因此您必须修复这两个文件,并且必须在 Visual Studio 关闭时修复这两个文件。这两个文件是您的解决方案的 .vs\???\config 文件夹中的 applicationhost.config 文件;以及您的 Web 项目的 .csproj.user 文件夹。 编辑这两个文件并删除有问题的配置。甚至可能只是删除这两个文件。然后在 Visual Studio 中重新打开您的应用程序。祝你好运!

                  【讨论】:

                  • 如果您的解决方案包含一个普通的老式网站(不是 Web 应用程序),那么端口号也在解决方案文件 .sln 中
                  • 对于老式网站,编辑 .(sln 解决方案文件和 applicationhost.config 文件)都有效。
                  【解决方案14】:

                  端口号不匹配

                  在我的情况下,问题出在我的解决方案文件夹下 .vs 的配置文件中找到的绑定标记中,端口号不匹配。绑定如下

                  <bindings>
                       <binding protocol="http" bindingInformation=":16433:localhost" />
                  </bindings>
                  

                  在我的设置中,我将 url 设置为 http://localhost:1943/

                  所以我所做的是删除内部绑定并运行我的网络应用程序,然后它生成了具有不同编号的新绑定,然后我将新生成的端口复制到我的设置中,然后错误消失了。

                  【讨论】:

                    【解决方案15】:

                    就我而言,执行以下操作可以解决问题:

                    • 从 .vs\\config\applicationhost.config 中删除站点
                    • 从 Documents\IISExpress\config\applicationhost.config 中删除站点
                    • 从 .csproj 中删除 IISUrl

                    当我重新启动 Visual Studio 时,它为项目分配了一个全新的端口号并完美运行

                    【讨论】:

                    • 从launchsettings.json 中删除iisExpress 包括applicationUrlsslport 为我完成了其他步骤。
                    • 删除文件夹中的 IISExpress 文件帮助我
                    【解决方案16】:

                    即使 netstat 没有显示任何冲突,我也遇到了这个问题。

                    以下为我修复了它:

                    1. 关闭 Visual Studio
                    2. 打开文件资源管理器
                    3. 导航到有问题的项目的文件夹
                    4. 删除objbin文件夹
                    5. 删除 *.user 文件(这可能是可选的)
                    6. 重新启动 Visual Studio 并重试

                    【讨论】:

                      【解决方案17】:

                      刚刚浪费了半天时间试图解决同样的问题,我觉得我应该添加最终对我有用的解决方案。

                      TL;DR如果netstat表明问题没有被使用,仍然尝试其他一些完全不同的范围

                      我以前遇到过这个问题,但通常会发现重新启动 Visual Studio、更改端口(增加 1)或重新启动就可以了。然而,在这种情况下,这些都没有帮助,netstat 没有找到一个冲突的过程。我什至重新安装了 IIS 和 Visual Studio,并删除了我怀疑可能会干扰的其他几个程序。似乎 IIS 试图启动同一站点的多个实例。

                      最终我尝试在没有findstr 的情况下运行netstat。我目视扫描了活动端口列表,发现虽然我尝试过的端口没有列出,但有一些进程使用了​​类似范围内的端口。因此,我寻找了一个免费的范围,选择了一个端口号,现在似乎可以正常工作了。

                      我很想听听是否有人可以解释为什么这可能有效?

                      【讨论】:

                        【解决方案18】:

                        我可以通过删除 &lt;site&gt;&lt;/site&gt; 标记中的所有内容来解决此问题

                        Users/&lt;username&gt;/Documents/IISExpress/config/applicatiohost.config文件

                        <sites>
                          <site>
                             .
                             .   ===> remove this content including the <site> and </site> tags.
                             .
                          </site>
                        </sites>
                        

                        【讨论】:

                          【解决方案19】:

                          总结所有答案。有2个解决方案。两者都为我工作。 - 解决方案 #1 终止使用相同端口的应用程序。 - 解决方案 #2 配置 IIS Express 为您的项目使用不同的端口。

                          解决方案 #1 (假设错误消息中的端口是 443) 在命令行中运行:

                          netstat -ao | findstr 443
                          

                          它返回:TCP 0.0.0.0:443 pe01:0 LISTENING 2904 最后一个数字(感谢@chris-schiffhauer)是要杀死的PID。转到任务管理器 -> 进程 -> [显示所有用户的进程],杀死 PID=2904 的进程。在我的例子中,它是 VmWare 主机。

                          解决方案 #2 (假设消息是:无法为站点“MyProject.Website0”注册 URL“http://localhost:433/”...)。 在 notepad++ 中打开以下文件:C:\Users\MY_USER_NAME\Documents\IISExpress\config\applicationhost.config 在其中找到包含以下内容的行:

                          <site name="MyProject.Website0" id="...
                          ...
                                      <bindings>
                                          <binding protocol="http" bindingInformation="*:80:localhost" />
                                          <binding protocol="https" bindingInformation="*:443:localhost" />
                                      </bindings>
                          

                          要么将433 更改为其他内容,例如4330,要么删除冲突的&lt;binding.../&gt; 标签。

                          【讨论】:

                            【解决方案20】:

                            转到网络项目 属性 >> Web >> 项目 URL >> 更改端口 即:http://localhost:22345/ => http://localhost:22346/ 希望对您有所帮助!

                            【讨论】:

                              【解决方案21】:

                              我已经尝试了以下方法:

                              • 重新启动 Visual Studio
                              • 检查所有可能正在监听我的特定号码的可用端口,但它总是返回零结果。没有进程正在侦听我的端口。
                              • 我也尝试过使用这个,但结果为零。

                                netstat -aon |找到“:80”

                              • 我也尝试过使用但也返回零结果。

                                netstat -ao |查找str

                              所以我所做的是删除这个“Microsoft.VsHub.Server.HttpHostx64.exe”然后我的项目成功启动并在浏览器中启动。错误已修复。我不知道为什么,但它有效。

                              截图如下:

                              【讨论】:

                                【解决方案22】:

                                来自https://www.davidsalter.co.uk/unable-to-launch-the-iis-express-web-server-error-0x80070020/

                                错误代码0x80070020 表示ERROR_SHARING_VIOLATION,在 IIS Express(或 IIS)的情况下表示它尝试侦听的端口正被另一个进程使用。

                                使用netstat 命令找出哪个应用程序正在使用该端口。

                                netstat -ao | findstr <port_number_to_search_for>
                                

                                a 参数告诉 netstat 显示所有连接和监听端口。

                                o 参数告诉 netstat 显示与连接关联的进程 ID。

                                运行上面的 netstat 命令会产生如下输出:

                                C:\>netstat -ao | findstr 4026
                                TCP    12.0.0.1:4026        cs-pc:4026         LISTENING       9544
                                

                                显示的最后一个数字(此处为 9544)是进程 ID。

                                【讨论】:

                                • 使用-n 开关也可以大大加快这一速度——它使用“数字”输出,这意味着它不会浪费时间查询 DNS 以将 IP 地址解析为主机名。
                                • 我只是想为其他人提一下,这没有找到任何使用端口的东西,但是更改运行的端口 localhost 确实解决了问题。因此,如果所有其他方法都失败了,无论如何都要改变它。
                                • 我从以管理员身份运行的 PowerShell 窗口运行 taskkill /PID 4 /F,但收到错误消息“拒绝访问”
                                • 我已经用我尝试运行的端口运行了“netstat -ano | findstr ”,但没有找到。
                                【解决方案23】:

                                在我们将解决方案从 Visual Studio 2012 升级到 2015 后,我遇到了同样的问题。我来到这里运行 netstat 却发现没有其他应用程序使用相同的端口。事实证明,我的解决方案中的applicationhost.config Users/&lt;username&gt;/Documents/IISExpress/config.vs 文件夹中的applicationhost.configapplicationhost.config 中映射了相同端口的相同站点。我应该注意,问题也不是在升级后立即开始的。它只是在一天早上开始持续失败。几次重启似乎也没有解决问题。

                                从存储在我的文档中的站点中删除冲突站点并重新启动 Visual Studio 解决了问题。

                                【讨论】:

                                • 这对我有帮助:applicationhost.config 位于解决方案文件夹下的 .vs\config 文件夹中。
                                【解决方案24】:

                                我有同样的问题。正如@Kautsky Lozano 上面提到的那样另一个应用程序正在使用该端口。

                                所以[对于 Windows 操作系统]:

                                • 打开资源监视器(任务管理器 -> 性能 -> 打开资源监视器)
                                • 点击网络标签。
                                • 然后在 TCP Connections 找到使用 IIS Express 使用的本地端口的应用程序并关闭它。 (我的案例是 Firefox)

                                【讨论】:

                                  【解决方案25】:

                                  不进入命令控制台的最简单的第一步是关闭所有应用程序(包括 VS),然后自行启动 VS 并再次尝试。可能有另一个应用程序(例如您的浏览器)导致了冲突。 在我的情况下,Chrome 导致它并在关闭所有内容并重新启动 VS 时得到解决。我再次打开 Chrome,一切正常。

                                  上面的 netstat 东西很有用,但对我来说,只有当你不能按照我的建议去做时。

                                  【讨论】:

                                    【解决方案26】:

                                    upgrading an MVC project 时我遇到了这个问题。我在现有的 .csproj 文件上复制了较新的 MVC .csproj,然后返回到一个完全正常工作的项目。我没有考虑的是旧 .csproj 中的现有端口号。新项目有一个新的端口号,但共享项目/程序集名称。这足以让 IIS Express 失去理智并抛出这个异常。

                                    只需从 git 中挖掘旧端口号并更改 IIS Express URL 以将其包含在项目设置中就足以修复它。

                                    【讨论】:

                                      【解决方案27】:

                                      我遇到了同样的问题。我刚刚重新启动了 Visual Studio,它工作正常。

                                      【讨论】:

                                      • 就我而言,我的 Windows 10 机器蓝屏,我不得不重新启动 两次。其他网站项目运行良好(不同的本地端口),这里的其他答案都没有。更改项目的端口也没有解决它。 IIS Express 本身必须有一些其他配置。
                                      • 每当我在 VS 2019 中运行项目并使用 F5 进行调试时,似乎都会发生这种情况,然后尝试在不使用 Ctrl+F5 调试的情况下运行它,这是失败的时候。重新启动可以修复它,但我希望我能从一开始就阻止它发生。
                                      猜你喜欢
                                      • 1970-01-01
                                      • 2021-08-06
                                      • 2011-09-04
                                      • 2014-04-05
                                      • 1970-01-01
                                      • 2018-04-14
                                      • 2021-10-12
                                      相关资源
                                      最近更新 更多