【发布时间】:2011-04-13 08:54:23
【问题描述】:
我们产品中的互联网访问代码适用于 99.99% 的人。但是,对于其中一些人来说,它根本不起作用。我们一直在添加一些跟踪代码来尝试找出问题所在,结果 InternetOpenURL 报告错误 2 - “系统找不到指定的文件” - 来自此函数调用:
options = INTERNET_FLAG_RAW_DATA | INTERNET_FLAG_RESYNCHRONIZE;
handle = InternetOpenUrl(internet,url,NULL,0,options,0);
(internet 是使用 InternetOpen 打开的 Internet 连接的句柄,url 是我们网络服务器上存在的简单文本文件的 URL。)
我们测试了两个不同的网站,一个 http 和一个 https,它们位于完全不同的地方(不同的域、托管在地理位置上的服务器),并且对于这个人和其他一些人,它们都给出了相同的错误。 99% 的人,包括我们自己,都可以毫无问题地访问它们。不仅如此,受影响的人可以在他们的网络浏览器中毫无问题地访问相同的 URL。
这里到底发生了什么? :(
编辑:幸运的是,我们发现了问题所在!事实证明,有些人在他们的 Internet 选项中选中了“为 LAN 使用代理服务器”复选框,而没有实际指定代理服务器。我们试图使用不存在的代理服务器详细信息,当然会遇到问题。
我仍然需要为此研究一种程序化解决方案,但是报告问题的每个人都已通过此解决方案解决了他们的问题:
- 打开 Internet Explorer
- 转到“工具 -> Internet 选项”
- 点击“连接”标签。
- 在底部附近应该有一个标有“LAN 设置”的按钮。点击它。
- 在“代理服务器”字段下,取消选中“为您的 LAN 使用代理服务器”
- 全部点击确定,重启 Windows,然后再次尝试通过产品访问互联网。
我不知道为什么这么多人选中了该框,但没有指定代理服务器。但显然这是修复它需要做的。
【问题讨论】:
-
您是否尝试过使用诸如wireshark之类的东西来嗅探来回发送的实际数据包?因为这不仅可以揭示您遇到的错误(例如某种形式的转换或缺少转换,即:' ' to %20)
-
不幸的是,这发生在我们无法访问的用户机器上,因此我们无法进行任何类型的调试。 :(