Symptomy
Jeśli komputer nie ma uruchomić program Microsoft Internet Explorer i użyć funkcji WinHttpGetIEProxyConfigForCurrentUser w dowolnym programie, pojawi się następujący komunikat o błędzie:
ERROR_FILE_NOT_FOUND
Przyczyna
Funkcja WinHttpGetIEProxyConfigForCurrentUser używa następującego podklucza rejestru:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet SettingsTen podklucz rejestru jest tworzony program Internet Explorer jest uruchamiany po raz pierwszy. Jeśli komputer nie został uruchomiony program Internet Explorer, ten podklucz rejestru nie istnieje. Kiedy wywołanie funkcji WinHttpGetIEProxyConfigForCurrentUser w programie, funkcja przeszukuje ten wpis rejestru i nie można go znaleźć, a komunikat o błędzie.
Rozwiązanie
Aby rozwiązać ten problem, uruchom program Internet Explorer, a następnie użyć funkcji WinHttpGetIEProxyConfigForCurrentUser w dowolnym programie.
Więcej informacji
Kroki prowadzące do odtworzenia problemu
-
Zaloguj się do komputera, na którym nigdy nie był używany program Internet Explorer.
-
Uruchom program Microsoft Visual Studio .NET.
-
W menu plik wskaż polecenie Nowy, a następnie kliknij Projekt.
-
W obszarze Project Typeskliknij Projektów Visual C++.
-
W obszarze Szablonykliknij Projekt systemu Win32.
-
W polu Nazwa wpisz Test, a następnie kliknij przycisk OK.
-
Na stronie Zapraszamy do Kreatora aplikacji Win32 kliknij przycisk Ustawienia aplikacji.
-
W obszarze Typ aplikacjikliknij aplikacji konsoli, a następnie kliknij przycisk Zakończ. Tworzony jest plik Test.cpp.
-
Zastąpić istniejący kod w pliku Test.cpp z następującego kodu:
#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
Uwaga Plik Winhttp.h i plik Winhttp.lib znajdują się w zestawie Microsoft Platform software development kit (SDK). Aby pobrać zestaw SDK platformy, odwiedź następującą witrynę firmy Microsoft w sieci Web:
-
W menu Projekt kliknij polecenie Właściwości testu.
-
W lewym okienku kliknij dwukrotnie program łączący.
-
W obszarze Linkerkliknij dane wejściowe.
-
W prawym okienku wpisz winhttp.lib w polu Dodatkowe zależności , a następnie kliknij przycisk OK.
-
W menu Kompilacja kliknij polecenie Skompiluj rozwiązanie.
-
Naciśnij kombinację klawiszy CTRL + F5, aby uruchomić program bez debugera. Zostanie wyświetlony komunikat o błędzie wymieniony w sekcji "Symptomy".
Informacje
Aby uzyskać więcej informacji, odwiedź następującą witrynę usługi MSDN (Microsoft Developer Network) w sieci Web: