IPconfig 在错误的位置寻找 DLL

IPconfig 在错误的位置寻找 DLL

(编辑 4:)在我按照下面编辑 #3 中描述的方式操作后,问题消失了。剩下的问题是:为什么会出现这个问题,又是如何解决的?



环境:Windows 11。

当我尝试运行时IPconfig,收到错误消息:

IPCONFIG.EXE-未找到入口点

无法找到程序入口点 RtlConvertUiListToApiList 于动态链接库 C:\Users\<folder>\WINDOWS\SYSTEM32\NETAPl32.dll 中。

它正在查找的文件夹是我存档 Windows 文件夹先前状态的地方。该存档文件夹仅用于历史参考,从未(据我所知)用于运行任何东西。我不知道 Windows 决定在那里查找任何 DLL 的方式或原因。该存档是在 2017 年创建的,我确信IPconfig从那时起我已经运行过很多次,没有出现问题。

我检查了实际Windows\System32文件夹,其中确实有该文件netapi32.dll

今天早些时候,我重启了电脑,以解决下面问题背景中描述的问题。因此,我怀疑再次重启电脑是否有帮助。

(编辑 1:)Frank Thomas 的评论问我我的path参数是什么。好问题;我应该早点检查一下。为了检查它,我打开命令提示符并运行echo %path%,结果如下:

C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\dotnet\;C:\Program Files\PowerShell\7\;C:\Users\<User>\AppData\Local\Microsoft\WindowsApps;;C:\Users\<User>\AppData\Local\Programs\Microsoft\VS Code\bin

那里没有存档文件夹。

(编辑 2:) harrymc 的评论要求我运行where IPconfig。 再次在命令提示符中执行此操作,结果如下:

C:\Windows\System32\ipconfig.exe

什么原因导致 Windows 在错误的位置查找其 DLL?我怎样才能让它在正确的位置查找?



编辑3:harrymc 的第二条评论问了两件事。

第二个是检查文件大小和时间戳ipconfig.exe。我的大小也是 56 kb。我的时间戳与他的略有不同,2023 11 15 00:51。

第一个是在其文件夹中运行IPconfig。这很有趣,因为这意味着在命令提示符中运行它。我以前没有这样做过,而是在 Windows 中运行它Start,即在按下 Windows 键时出现的框顶部的文本框中运行它。因此,无需先运行cd,我只需IPconfig在命令提示符中运行,猜猜怎么着?它成功了。

然后,为了重现原始问题,我按下 Windows 键并IPconfig再次运行。现在,我不再收到之前的错误。相反,显示屏上闪烁着一个黑色窗口并迅速消失。我知道那是一个命令提示符窗口正在运行IPconfig,然后在完成后关闭。

所以IPconfig现在运行正常。我剩下的问题是,为什么尝试从Start之前运行它会导致它在错误的位置查找 DLL,以及我在回复这些评论时做了什么来解决这个问题?

无论如何,我现在有了 IPv4 地址,可以继续进行打印机故障排除。感谢 Frank Thomas 和 harrymc 让我检查似乎神秘地解决了问题的东西。



编辑 5:harrymc 的第三条评论建议运行DISMSFC。他建议在修复错误的模式下运行它们,但我却首先在检查错误的模式下运行它们:

  • DISM /Online /Cleanup-Image /ScanHealth

    • 报告“未检测到组件存储损坏。”
  • DISM /Online /Cleanup-Image /CheckHealth

    • 报告“未检测到组件存储损坏。”
  • SFC /VerifyOnly

    • 报告了三个损坏的文件,均位于“C:\WINDOWS\System32\drivers”中:BthA2dp.sys、BthHfEnum.sys 和 bthmodem.sys。研究表明这些是误报[12]

因此,这些测试没有发现任何可能导致 Windows 在错误的位置寻找这些 DLL 的损坏。

编辑 6:Daniel B 评论说,DLL 搜索顺序不仅仅是%path%链接到参考关于。这很有趣,尤其是发现它%path%在 DLL 搜索位置列表中排在最后。但是,我没有看到任何线索来解释为什么 Windows 尝试在旧的存档文件夹中运行该 DLL。



该问题的背景:

我更换了 ISP,现在使用新 ISP 路由器的 WiFi。我已将两台设备连接到 WiFi:我的电脑和打印机。两台设备都报告已连接到 SSID,并且电脑上的互联网连接可以正常访问网站和电子邮件。现在我按照打印机的说明(我之前曾成功使用过)通过 WiFi 将电脑连接到打印机。在这些说明中的“在网络中搜索设备并从已发现设备列表中选择”的步骤中,我收到错误消息“无法通过网络找到任何设备”。我在 Google 上搜索了该消息并得到了打印机制造商提供的故障排除页面。它首先告诉我打印一页打印机的网络配置并检查它是否有有效的 IP 地址,它确实有。接下来,它告诉我IPconfig在计算机上运行并检查其 IP 地址。这时我遇到了上面描述的问题。

答案1

我不知道 Windows 为何或为何决定在那里查找 DLL

我认为这是终端服务的问题。(这是支持 Windows 中多重登录功能的功能,包括本地用户切换以及远程桌面。)

从历史上看,即使在 WinNT4 中(在 AppCompat/LUA/UAC 重定向之前),当在服务器上启用完整版本的终端服务时,它两种模式:“安装”模式和“执行”模式,其中后一种模式允许将所有对系统文件win.ini(或旧安装程序将转储到 C:\Windows 中的任何其他文件,如 DLL)的写入从全局 Windows 目录重定向到每个用户目录,并且查找“Windows 目录”中文件的各种函数都有一个%HOMEDRIVE%%HOMEPATH%\WINDOWS首先检查的特殊情况。

GetPerUserWindowsDirectory(在 GitHub中搜索termsrv/tsappcmp/inipath.c。)

相关内容