根据这个知识库文章当您运行“netsh int ip reset”命令时,它所做的就是重置两个注册表项的内容:
SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
SYSTEM\CurrentControlSet\Services\DHCP\Parameters\
但在我的测试系统上,它的作用似乎不止于此。
在 Windows Server 2012 R2 x64 机器上,当我的应用程序出现错误后,如果我尝试为网络接口设置静态 IP,就会立即出现 BSOD。
要修复此问题,我必须运行“netsh int ip reset”,然后才能设置静态 IP。现在,我正在尝试弄清楚“netsh int ip reset”如何修复此问题。
我知道这不是这两个注册表项的内容,因为我在虚拟机上执行以下操作:
- 当系统出现问题时进行虚拟机备份。
- 启动虚拟机并运行“netsh int ip reset”命令
- 导出两个注册表项
- 回滚到“netsh int ip reset”命令之前所做的备份
- 导入已保存的注册表项
- 在网络接口上设置静态 IP,但仍然出现 BSOD
当我的应用程序尝试使用过去已被另一个网络接口使用的 IP 地址配置网络接口时,首先它必须删除不存在的设备对应的 IP 配置,然后才能使用该 IP。
为此,它会搜索 SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces 中的每个注册表,并通过将“IPAddress”属性中的值与我想要使用的 IP 地址进行比较,查看是否有任何接口使用了我想要使用的 IP 地址。如果找到匹配项,它会首先检查该接口是否处于活动状态,如果不是,它会删除“IPAddress”属性中的值并将属性“EnableDHCP”设置为 1,然后我就可以在我的接口上使用该 IP。这就是我的应用程序做错的地方。当这个接口再次恢复活动状态时,它将通过 DHCP 设置 IP 配置,但如果您尝试在其上设置静态 IP,它将出现 BSOD。正确的做法是将“IPAddress”属性设置为“0.0.0.0”,并将“EnableDHCP”设置为 1。如果将“IPAddress”留空并将“EnableDHCP”设置为 1,则 TCPIP 配置中会出现问题,可以使用“netsh int ip reset”进行修复。但我不知道它具体修复了什么。我只知道它不在两个注册表项中,知识库文章提到。
那么除了重置这两个注册表的内容之外,“netsh int ip reset”还能做什么来修复我的测试系统上的问题呢?
答案1
同一篇 KB 文章提到,运行该命令将保存一个 resetlog.txt 日志文件。该日志说了什么?
您还可以从 SysInternals 运行进程监视器并让其监视您的 netsh 命令。
我在 Windows 8.1 工作站上执行了此操作,通过“进程名称 > 包含 > netsh”筛选了 ProcMon 的输出,并提取了 5,000 多个结果。运行此命令时似乎有很多事情发生。很抱歉,但我不会为您解析所有这些输出 :)