症状
如果您的计算机从未运行 Microsoft Internet Explorer 并且在任何程序中使用WinHttpGetIEProxyConfigForCurrentUser函数,您会收到以下错误消息:
ERROR_FILE_NOT_FOUND
原因
WinHttpGetIEProxyConfigForCurrentUser函数使用以下注册表子项:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet SettingsInternet Explorer 运行第一次创建此注册表子项。如果您的计算机没有运行 Internet Explorer,不存在此注册表子项。当您调用WinHttpGetIEProxyConfigForCurrentUser函数在程序中,该函数搜索此注册表项并不能找到它,并收到错误消息。
解决方案
要解决此问题,请启动 Internet Explorer,然后在任何程序中,使用WinHttpGetIEProxyConfigForCurrentUser函数。
更多信息
重现问题的步骤
-
登录到从未使用 Internet Explorer 中的计算机上。
-
启动 Microsoft Visual Studio.NET。
-
在文件菜单上,指向新建,然后单击项目。
-
在项目类型下单击Visual C++ 项目。
-
在模板下单击Win32 项目。
-
在名称框中,键入测试,然后单击确定。
-
在欢迎使用 Win32 应用程序向导页上,单击应用程序设置。
-
在应用程序类型下单击控制台应用程序,,然后单击完成。创建 Test.cpp 文件。
-
在 Test.cpp 文件中的现有代码替换为以下代码:
#include "stdafx.h"#include <Windows.h>#include <Winhttp.h>using namespace std;void main(){WINHTTP_CURRENT_USER_IE_PROXY_CONFIG MyProxyConfig;if(!WinHttpGetIEProxyConfigForCurrentUser(&MyProxyConfig)){//check the errorDWORD Err = GetLastError();cout << "WinHttpGetIEProxyConfigForCurrentUser failed with the following error number: " << Err << endl;switch (Err){case ERROR_FILE_NOT_FOUND:cout << "The error is ERROR_FILE_NOT_FOUND" << endl;break;case ERROR_WINHTTP_INTERNAL_ERROR:cout << "ERROR_WINHTTP_INTERNAL_ERROR" << endl;break;case ERROR_NOT_ENOUGH_MEMORY:cout << "ERROR_NOT_ENOUGH_MEMORY" << endl;break;default:cout << "Look up error in header file." << endl; }//end switch}//end ifelse{//no error so check the proxy settings and free any stringscout << "Auto Detect is: " << MyProxyConfig.fAutoDetect << endl;if(NULL != MyProxyConfig.lpszAutoConfigUrl){wcout << "AutoConfigURL is: " << MyProxyConfig.lpszAutoConfigUrl << endl;GlobalFree(MyProxyConfig.lpszAutoConfigUrl);}if(NULL != MyProxyConfig.lpszProxy){wcout << "AutoConfigURL is: " << MyProxyConfig.lpszProxy << endl;GlobalFree(MyProxyConfig.lpszProxy);}if(NULL != MyProxyConfig.lpszProxyBypass){wcout << "AutoConfigURL is: " << MyProxyConfig.lpszProxyBypass << endl;GlobalFree(MyProxyConfig.lpszProxyBypass);}}//end elsecout << "finished!";}//end main
注意:Winhttp.h 文件和 Winhttp.lib 文件包含在 Microsoft 平台软件开发工具包 (SDK)。若要下载平台 SDK,请访问下面的 Microsoft 网站:
-
在项目菜单上,单击测试属性。
-
在左窗格中,双击链接器。
-
在链接器,单击输入。
-
在右窗格中,在附加依赖项字段中,键入winhttp.lib ,然后单击确定。
-
单击生成菜单上的生成解决方案。
-
按 CTRL + F5 以运行此程序时没有调试器。您会收到在"症状"一节中提到的错误消息。
参考
有关更多信息,请访问下面的 Microsoft Developer Network (MSDN) 网站: