跳转至

Windows Common Bugs

导言

主要是记录Windows使用时遇到的一些问题和解决方案。

预留端口冲突

  1. 系统动态端口范围(Ephemeral Ports):Windows 会为出站连接自动分配临时端口,默认范围是 49152-65535
  2. Hyper-V / WinNAT / WSL / Docker:启用这些虚拟化功能后,系统会随机保留部分端口用于 NAT 服务,即使 netstat 查不到占用,也无法绑定
  3. Administered Port Exclusions:通过 excludedportrange 机制,某些端口被系统标记为"禁止用户态程序使用"
# 查看 TCP 保留端口范围(管理员权限运行)
(base) PS D:\PowerShell> netsh int ipv4 show excludedportrange protocol=tcp

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
      3883        3982
      3983        4082
      4183        4282
      4283        4382
      4383        4482
      4483        4582
      4583        4682
      4683        4782
      4783        4882
      4883        4982
      5041        5140
      5479        5578
      8281        8380
     50000       50059     *

* - Administered port exclusions.

应对

# 1. 先停止 WinNAT 服务(释放被占端口)
net stop winnat

# 2. 添加排除范围(保留 1080~1089 共10个端口)
# netsh int ipv4 add excludedportrange protocol=tcp startport=1080 numberofports=10

# 删除之前添加的保留范围
netsh int ipv4 del excludedportrange protocol=tcp startport=5050 numberofports=10
netsh int ipv4 del excludedportrange protocol=tcp startport=8233 numberofports=10

# 3. 重启 WinNAT 服务
net start winnat

删除无权限文件

在 Windows 中,如果删除文件时提示权限不足,可以通过以管理员身份运行命令提示符并使用命令行工具强制删除文件。以下是具体步骤:

  1. 以管理员身份运行命令提示符
  2. Win + S,搜索“cmd”。
  3. 右键点击“命令提示符”,选择“以管理员身份运行”。

  4. 以管理员身份运行 PowerShell

  5. Win + S,搜索“PowerShell”。
  6. 右键点击“Windows PowerShell”,选择“以管理员身份运行”。

  7. 获取文件/文件夹的所有权

  8. 输入以下命令:

    takeown /f "文件或文件夹路径" /r /d y
    

    • /f:指定文件或文件夹路径。
    • /r:递归应用于文件夹中的所有文件。
    • /d y:默认同意所有权更改。
  9. 修改权限

  10. 输入以下命令:

    icacls "文件或文件夹路径" /grant administrators:F /t
    

    • /grant administrators:F:授予管理员完全控制权限。
    • /t:递归应用于所有子文件和文件夹。
  11. 删除文件或文件夹

  12. 使用 delrmdir 命令删除。

Bug

操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试。

打开资源监视器,在关联的句柄里搜索文件/文件夹的名称。结束相关占用进程即可。1

Win11有个离谱的bug,有一种占用是Thumbs.db的文件,是系统为了实现文件预览而自动生成的文件。应该建立一个白名单,将这些自动结束,并排除出占用判断逻辑。

参考文献

评论