Проблемы
Если ваш компьютер никогда не работал Microsoft Internet Explorer и использовать функцию WinHttpGetIEProxyConfigForCurrentUser в любой программе, появляется следующее сообщение об ошибке:
ERROR_FILE_NOT_FOUND
Причина
Функция WinHttpGetIEProxyConfigForCurrentUser использует следующий подраздел реестра:
Параметры HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InternetЭтот подраздел реестра создается при первом запуске Internet 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 Platform software development kit (SDK). Для загрузки пакета Platform SDK, посетите следующий веб-узел корпорации Майкрософт:
-
В меню проект выберите команду Свойства теста.
-
В левой области дважды щелкните Компоновщик.
-
Компоновщикустановите для входных данных.
-
В правой области в поле Дополнительные зависимости введите winhttp.lib и нажмите кнопку ОК.
-
В меню Построение выберите команду Построить решение.
-
Нажмите сочетание клавиш CTRL + F5, чтобы запустить программу без отладчика. Появляется сообщение об ошибке, описанное в разделе «Проблема».
Ссылки
Дополнительные сведения см. на следующей веб-странице узла MSDN: