2

Windows Vista で MFC wininet クラスを使用しているときに、エラー 12029 (ERROR INTERNET CANNOT CONNECT、サーバーへの接続に失敗しました。) を受け取り続けました。エラーの原因は、Windows Defender によるものでした。Windows Defender を完全にオフにするよりも、これを回避する良い方法はありますか? 「リアルタイム保護」を無効にしようとしましたが、12029 エラーを停止するには WD を完全に無効にする必要がありました。

より良い解決策がない場合は、同じ問題を抱えている他の誰かがこの質問を見て、自分の問題を解決できることを願っています. インターチューブの高低を検索しましたが、wininet エラー 12029 と WD の間の相互参照は見つかりませんでした。

参照用の私のコード

::CInternetSession session;
::CHttpConnection* connection = session.GetHttpConnection(L"twitter.com",80,m_csUserName,m_csPassword);   
::CHttpFile* httpfile = connection->OpenRequest(CHttpConnection::HTTP_VERB_GET,L"/account/verify_credentials.xml");             
httpfile->SendRequest();
4

1 に答える 1

2

プログラムをブロックした後に Windows Defender が警告メッセージを表示する場合は、プログラムを「許可されたアイテム」のリストに追加するオプションが必要です。確かに、これは非運用/個人コードを使用している場合 (および Defender が警告メッセージを表示している場合) にのみ実行可能なオプションです。

そうは言っても、wininet ライブラリの使用方法に基づいて、Defender が潜在的なリスクを検出した可能性があります。代わりに、下位レベルのソケットを使用することは可能でしょうか? これが使用する唯一のネットワーク コードである場合、一般的な winsock ライブラリを介して複製するのは簡単であり、wininet の代わりにそれを使用すると、Defender がプログラムをブロックする傾向が大幅に低下する可能性が高くなります。


編集: 以下のコメントで提案したように、MFC フラグメントを個別にテストすることに加えて、標準の WinAPI の方法で試してみる価値があるかもしれません。つまり、コンピューターの wininet ライブラリに問題がある場合、このコードはまた、接続に失敗します:

int read = 0;
char* str = "*/*", buff[1024] = {};
HINTERNET inet = InternetOpen("GRB", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (!(inet=InternetConnect(inet, "twitter.com", 80, "username", "password", INTERNET_SERVICE_HTTP, 0, 0))) 
    cout << "conn failed" << endl;
if (!(inet=HttpOpenRequest(inet, "GET", "/account/verify_credentials.xml", NULL, NULL, (const char**)&str, 0, 0))) 
    cout << "open failed" << endl;
if (!HttpSendRequest(inet, NULL, 0, NULL, 0)) 
    cout << "send failed" << endl;
InternetReadFile(inet, buff, 1023, (DWORD*)&read);
cout << buff << endl;
system("pause");

(コンソール プログラムとして設計されているため、正しいヘッダー/ライブラリが含まれていることを確認してください)

于 2009-08-18T02:37:00.233 に答える