在Visual Studio中无法启动IIS Express Web服务器。

189

我尝试通过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被系统使用,其描述为NT Kernel & System。所以我尝试停止http服务。所有依赖服务都已停止。但是我在停止http服务时遇到了问题。

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

所以,我尝试手动停止和启动服务。但“结束进程”选项被禁用了。 如果有人能帮助解决这个问题将会很有帮助。


1
在更新Windows 10之后出现了问题:https://developercommunity.visualstudio.com/content/problem/580466/cannot-start-iis-express-0x80070020.html - XoXo
值得一提的是,上面的链接指向一个链接这里,其中提到您可以尝试netsh http add iplisten ipaddress=:: - XoXo
30个回答

217

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

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

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保留了其端口,而不会干扰我的应用程序使用的端口: 保留的端口范围


2
这对我有用,但我需要Docker,所以我只是在启动时禁用它,而不是卸载它。 - cderrick
3
像 @Cory 一样,我将我的端口号更改为范围之外的某个值。这让我感到有些烦恼,因为每次更改时都需要更改相关应用程序的引用,但比起完全重新启动要好得多。 - Nick Rubino
1
禁用 Hyper-V 并重新启动解决了我的问题。 - Kyle Burkett
3
更改项目使用的端口号可能“不那么友好”。在此查看更改http和https端口号的解决方案(最后一个“技巧”仅适用于https端口号)。 - A.Buonanni
2
哇!谢谢谢谢谢谢谢谢!!! 这个问题已经困扰我好几个月了,我找不到任何一篇文章能够解释为什么会出现这种情况。我不知道为什么我的笔记本电脑上启用了Hyper-V。显然,它允许你在笔记本电脑上运行虚拟机,但由于我从来没有打算这样做,所以我将其禁用了。终于摆脱了!希望这是我最后一次遇到这个烦人的错误! - hannodb
显示剩余5条评论

181

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。

35
使用-n开关可以显著提高速度 -- 它使用“数字”输出,这意味着它不会浪费时间查询DNS来将IP地址解析为主机名。 - Tullo_x86
我只是想提醒其他人,这个程序在使用端口时没有找到任何东西,但更改本地主机运行的端口确实解决了问题。因此,如果其他方法都失败了,那就无论如何都要更改它。 - Shelby115
1
我在以管理员身份运行的PowerShell窗口中运行了taskkill /PID 4 /F命令,但是收到了一个“访问被拒绝”的错误消息。 - Kevin Burton
3
我运行了命令"netstat -ano | findstr <要搜索的端口号>"来查找我尝试运行的端口号,但是没有找到。 - Jeff Dege

88

1
点赞!但请注意,这可能会在重启之前禁用WSL的网络功能。 - Alex from Jitbit
3
我没有安装Docker,但这可以解决Windows 11和IIS Express的这个经常出现的问题。 - uniquelau
抓狂了,就是这样了。 - undefined

43

这个答案适用于我
1-用管理员身份打开命令提示符
2-输入net stop winnat
你将看到
“Windows NAT驱动程序服务已成功停止。”
3-然后输入 net start winnat
你将看到
“Windows NAT驱动程序服务已成功启动。”
之后转到Visual Studio并按下Ctrl + F5


这对我也有效。非常感谢您提供的解决方案。我已经苦苦挣扎了一段时间,而且它在不同的机器上的不同解决方案中随机发生。 - Vincent
2
为什么这个修复可以解决问题?背后发生了什么? - LarryBud
可以的。太棒了。 - undefined

38

我有同样的问题。我只是重新启动了 Visual Studio,然后问题就解决了。


在我的情况下,我的 Windows 10 电脑出现了蓝屏,并且我不得不重新启动 两次。其他网站项目工作正常(本地端口不同),这里的其他答案都没有起作用。更改项目的端口也无法解决问题。IIS Express 中必须有其他配置。 - Granger
每当我使用F5进行调试运行VS 2019项目,然后稍后尝试使用Ctrl + F5无调试运行时,似乎总会出现这种情况。重新启动可以解决问题,但我希望能够在第一时间防止它发生。 - pwhe23
.NET开发有一条黄金法则,我总是忘记:如果出现问题,请重新启动Visual Studio(并确保您以管理员权限这样做)。一次又一次地,我来到SO并阅读了复杂的解决方案,直到有人提醒我!重新启动解决了我的问题。 - Andy Brown

31

我遇到了相同的问题。如上面@Kautsky Lozano所提到的另一个应用程序正在使用该端口。

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

  • 打开资源监视器(任务管理器 -> 性能 -> 打开资源监视器)
  • 单击网络选项卡。
  • TCP连接中找到使用IIS Express使用的本地端口的应用程序,并将其关闭。(在我的情况下是Firefox)。

21

如果 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。 - jAntoni

15

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

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

netsh http add iplisten ipaddress=:: 

这个 bug 太随机了... 谢谢你的回复,解决了我的问题! - AxeEffect
那是唯一解决这个疯狂问题的方法。谢谢! - Mr. Ott

13

IIS Express 在 Visual Studio 中启动失败的解决方案

  • 打开任务管理器
  • 搜索“应用程序框架主机”进程
  • 结束该进程
  • 再次尝试运行

如果不成功,请尝试在命令提示符中运行此命令:“net stop winnat”


12

我遇到了同样的问题,这是因为我们将一个解决方案从Visual Studio 2012升级到2015。我来到这里并运行了 netstat ,只发现没有其他应用程序正在使用相同的端口。结果发现我的applicationhost.config文件中具有相同端口映射的相同站点存在于在Users/<username>/Documents/IISExpress/config和在我的解决方案内的.vs文件夹内的applicationhost.config中。需要注意的是,问题并不是在升级后立即开始的,它仅在某天早上开始不断失败。几次重启电脑似乎也无法解决问题。

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


这对我很有帮助:applicationhost.config 文件位于解决方案文件夹下的 .vs\config 文件夹中。 - Erik Oppedijk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接