Sintomas
Se o computador nunca executou o Microsoft Internet Explorer e utilizar a função de WinHttpGetIEProxyConfigForCurrentUser em qualquer programa, receberá a seguinte mensagem de erro:
ERROR_FILE_NOT_FOUND
Causa
A função WinHttpGetIEProxyConfigForCurrentUser utiliza a seguinte subchave de registo:
Definições de HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InternetEsta subchave de registo é criada da primeira vez que o Internet Explorer é executado. Se o computador não tiver executado o Internet Explorer, esta subchave de registo não existe. Quando chamar a função de WinHttpGetIEProxyConfigForCurrentUser num programa, as procuras de função para esta entrada de registo e não é possível localizar e recebe a mensagem de erro.
Resolução
Para resolver este problema, inicie o Internet Explorer e, em seguida, utilize a função de WinHttpGetIEProxyConfigForCurrentUser em qualquer programa.
Mais Informações
Passos para reproduzir o problema
-
Inicie sessão no computador onde Internet Explorer nunca tiver sido utilizado.
-
Inicie o Microsoft Visual Studio .NET.
-
No menu ficheiro , aponte para Novoe, em seguida, clique em projecto.
-
Em Tipos de projecto, clique em Projectos do Visual C++.
-
Em modelos, clique em Projecto Win32.
-
Na caixa nome , ensaiode tipo e, em seguida, clique em OK.
-
Na página Bem-vindo ao Assistente de aplicação de Win32 , clique em Definições da aplicação.
-
Em tipo de aplicação, clique em aplicação da consolae, em seguida, clique em Concluir. É criado o ficheiro Test.cpp.
-
Substitua o código existente no ficheiro Test.cpp com o seguinte código:
#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
Nota O ficheiro Winhttp.h e o ficheiro Winhttp.lib exe estão incluídos no Microsoft Platform software development kit (SDK). Para transferir o Platform SDK, visite o seguinte Web site da Microsoft:
-
No menu projecto , clique em Propriedades de ensaio.
-
No painel da esquerda, faça duplo clique Linker.
-
Em Linker, clique em Introdução.
-
No painel da direita, escreva winhttp.lib no campo Dependências adicionais e, em seguida, clique em OK.
-
No menu de criação , clique em Build Solution.
-
Prima CTRL + F5 para executar o programa sem o depurador. Recebe a mensagem de erro mencionada na secção "Sintomas".
Referências
Para mais informações, visite o seguinte Web site da Microsoft Developer Network (MSDN):