4

当社の製品のインターネット アクセス コードは、99.99% の人に完全に機能します。ただし、それらのいくつかについては、まったく機能しません。問題の原因を突き止めるためにトレース コードを追加しましたが、InternetOpenURL が次の関数呼び出しからエラー 2 - 「指定されたファイルが見つかりません」を報告していることが判明しました。

options = INTERNET_FLAG_RAW_DATA | INTERNET_FLAG_RESYNCHRONIZE;
handle = InternetOpenUrl(internet,url,NULL,0,options,0);

(internet は、InternetOpen で開かれたインターネット接続へのハンドルであり、url は、Web サーバーに存在する単純なテキスト ファイルへの URL です。)

1 つは http と 1 つは https で、まったく異なる場所 (異なるドメイン、地理的に離れた場所でホストされているサーバー) にある 2 つの異なる Web サイトをテストしましたが、どちらもこの 1 人と他の数人に同じエラーを返します。私たちを含め、99%の人がまったく問題なくアクセスできます。それだけでなく、影響を受けた人々は Web ブラウザで問題なく同じ URL にアクセスできます。

ここで一体何が起こっているのでしょうか?:(

編集:運が良ければ、何が問題なのかがわかりました!実際にプロキシ サーバーを指定せずに、インターネット オプションで [LAN にプロキシ サーバーを使用する] チェックボックスをオンにしている場合があります。存在しないプロキシ サーバーの詳細を使用しようとしていましたが、もちろんそれを行う際に問題が発生しました。

これについてはまだプログラムによる解決策を調査す​​る必要がありますが、問題を報告するすべての人は、この解決策によって問題を解決しています:

  1. Internet Explorer を開く
  2. 「ツール -> インターネット オプション」に移動します。
  3. [接続] タブをクリックします。
  4. 下部近くに「LAN 設定」というラベルの付いたボタンがあるはずです。クリックして。
  5. [プロキシ サーバー] フィールドの下で、[LAN にプロキシ サーバーを使用する] のチェックを外します。
  6. すべてに [OK] をクリックし、Windows を再起動して、製品からインターネットへのアクセスを再試行します。

多くの人がチェックボックスをオンにしているのに、プロキシ サーバーが指定されていない理由がわかりません。しかし、どうやらこれはそれを修正するために行う必要があることです。

4

5 に答える 5

2

この情報を考えると、これらのユーザーは、wininet をフックして通話を妨害しているファイアウォール (または何らかの種類のセキュリティ ソフトウェア) を持っていると推測できます。または、マルウェアが侵入している可能性があります。

于 2010-09-26T19:03:18.630 に答える
2

GetLastError()おそらく、何が問題なのかを調べる最良の方法ではありません。ドキュメントから:

サービスへのアクセスが拒否された理由を特定するには、InternetGetLastResponseInfoを呼び出します。

于 2010-09-20T04:10:38.467 に答える
2

解決策は、Internet Explorer を開くのと同じくらい簡単かもしれません。私はブラウザーを使用したことはありませんが、Windows の更新により InternetOpenUrl への呼び出しが中断されました。

IE を開くと、プロキシ情報の読み取りが再び機能するようにオプションが設定されます。これは、InternetOpen() で INTERNET_OPEN_TYPE_PRECONFIG を使用する場合に重要であることに注意してください。

最初は INTERNET_FLAG_RELOAD が設定されている場合にのみ問題が見られましたが、すぐにすべてが劣化し、プレーンなバニラ接続も失敗しました。

tl;dr IEを開いて、システムを祝福できるようにします

于 2013-08-01T20:17:53.677 に答える
1

これらのユーザーはプロキシを使用していますか? IE でプロキシが設定されている場合、情報が取得されてエラーが発生している可能性があります。

また、私はヒューに同意します。GetLastError() が誤解を招く場合があります。これを使用する場合は、呼び出しを行う前に SetLastError(0) を確認する必要があります。そうしないと、以前のメソッド呼び出しによって設定されたエラー コードを取得する可能性があります。

于 2010-09-23T16:05:03.183 に答える
1

次のようなことを試してください。

エラーが発生した場合は、SetLastError 関数をフックし (手動でホット パッチを使用するか、MS Detours などを使用して)、InternetOpenUrl を再度呼び出します。

関数のフックで、SetLastError 引数がゼロでない場合、ミニダンプを作成します。そのエラーが設定されている場所が表示されます。

于 2010-09-24T15:43:32.427 に答える