You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 11与QT5.14:请求Server2016时出现8007277C错误求解决

问题

我们有一台部署在AWS实例上的Windows Server 2016 Datacenter数据服务器。在Windows 11设备上使用QT Creator调试编译后的程序时,发起如下HTTP请求:

QUrl("http://server.com/customer/v0/index.php/?object=reset_password&username=blah&email=email@email.com")

每次请求都会在调试窗口输出以下错误日志:

onecore\net\netprofiles\service\src\nsp\dll\namespaceserviceprovider.cpp(550)\nlansp_c.dll!5C5C85D4: (caller: 75EBCD00) LogHr(3) tid(8148) 8007277C No such service is known. The service cannot be found in the specified name space.

该问题源于Windows 11(及部分Win10更新版本)弃用了Layered Service Providers(LSP),现有相关案例未给出明确解决方案。

可行修复/规避方案

1. 强制QT使用WinHTTP API

在QT项目的.pro配置文件中添加以下定义,强制使用微软现代HTTP客户端API替代旧的WinSock相关实现,彻底规避LSP依赖:

QT += network
DEFINES += QT_USE_WINHTTP

添加后重新编译整个项目。

2. 重置Windows网络栈

以管理员身份打开命令提示符,执行以下命令重置Winsock目录,清除系统中残留的废弃LSP注册项:

netsh winsock reset

执行完成后重启电脑生效。

3. 显式控制DNS解析流程

在代码中手动处理DNS查询,避免依赖系统默认的命名空间服务解析,示例代码如下:

QDnsLookup dnsLookup(QDnsLookup::A, "server.com");
connect(&dnsLookup, &QDnsLookup::finished, [&]() {
    if (!dnsLookup.error()) {
        const auto hostRecords = dnsLookup.hostAddressRecords();
        if (!hostRecords.isEmpty()) {
            QString serverIp = hostRecords.first().value().toString();
            // 替换为目标IP构造请求URL
            QUrl requestUrl(QString("http://%1/customer/v0/index.php/?object=reset_password&username=blah&email=email@email.com").arg(serverIp));
            // 发起HTTP请求逻辑
        }
    }
    dnsLookup.deleteLater();
});
dnsLookup.lookup();

4. 更新QT至最新稳定版本

QT官方在后续版本中针对Windows 11的网络API兼容性问题做了适配,更新到最新稳定版可能直接解决该LSP相关报错。


内容的提问来源于stack exchange,提问作者jabroni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:51:12