Почему InternetOpenURL сообщает об ошибке 2 (система не может найти указанный файл)? - PullRequest
4 голосов
/ 16 сентября 2010

Код доступа в Интернет в нашем продукте отлично работает для 99,99% людей.Однако, для некоторых из них это просто не работает вообще.Мы добавили некоторый код трассировки, чтобы попытаться выяснить, в чем проблема, и оказалось, что InternetOpenURL сообщает об ошибке 2 - «Система не может найти указанный файл» - из этого вызова функции:

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

(интернет - это дескриптор подключения к Интернету, открытое с помощью InternetOpen, URL-адрес - это URL-адрес простого текстового файла, который существует на нашем веб-сервере.)

Мы тестируем два разных веб-сайта, один http иодин https, который расположен в совершенно разных местах (в разных доменах, на серверах, расположенных географически отдельно), и они оба выдают одинаковую ошибку для этого одного парня и нескольких других.99% людей, включая нас самих, могут получить к ним доступ без каких-либо проблем.Мало того, что затронутые люди могут без проблем обращаться к одним и тем же URL-адресам в своих веб-браузерах.

Что здесь может происходить?: (

РЕДАКТИРОВАТЬ : К счастью, мы выяснили, что идет не так! Оказывается, у некоторых людей в настройках Интернета есть флажок «Использовать прокси-сервер для вашей локальной сети».без указания прокси-сервера. Мы пытались использовать несуществующие данные прокси-сервера и, конечно, сталкивались с проблемами при его выполнении.

Мне все еще нужно исследовать программное решение для этого, но каждый, ктосообщает, что проблема решена с помощью этого решения:

  1. Откройте Internet Explorer
  2. Перейдите в «Инструменты -> Свойства обозревателя»
  3. Откройте вкладку «Подключения».
  4. Внизу внизу должна быть кнопка с надписью «Настройки локальной сети». Нажмите ее.
  5. В поле «Прокси-сервер» снимите флажок «Использовать прокси-сервер для вашей локальной сети»
  6. Нажмите OK для всего, перезапустите Windows и попробуйте снова подключиться к Интернету через продукт.

Я не знаю, почему у стольких людей флажок установлен, но прокси-сервер не работаетг указан.Но, видимо, это то, что нужно сделать, чтобы это исправить.

Ответы [ 5 ]

2 голосов
/ 02 августа 2013

Решение может быть так же просто, как открыть Internet Explorer.Я никогда не использую браузер, но обновление Windows прервало вызовы InternetOpenUrl.

При открытии IE параметры будут настроены так, что чтение информации прокси снова будет работать.Обратите внимание, что это важно при использовании INTERNET_OPEN_TYPE_PRECONFIG в InternetOpen ().

Изначально я видел проблемы только при установке INTERNET_FLAG_RELOAD, но вскоре все ухудшилось, так что обычные ванильные соединения тоже не работали.

tl; dr Откройте IE, чтобы он мог благословить вашу систему

2 голосов
/ 26 сентября 2010

Учитывая эту информацию, я бы предположил, что у этих пользователей есть брандмауэр (или какое-либо программное обеспечение для обеспечения безопасности), который перехватил wininet и мешает вашему звонку.Кроме того, они могут быть заражены вредоносным ПО.

2 голосов
/ 20 сентября 2010

GetLastError(), вероятно, не лучший способ узнать, что пошло не так.Из документов :

Чтобы определить причину отказа в доступе к услуге, позвоните InternetGetLastResponseInfo .

1 голос
/ 24 сентября 2010

Попробуйте что-то вроде следующего:

В случае ошибки перехватите функцию SetLastError (вручную, с помощью оперативного исправления, или с помощью MS Detours или чего-то другого) и снова вызовите InternetOpenUrl.

В функции перехвата, если аргумент SetLastError не равен нулю, сделать минидамп.Вы получите место, где установлена ​​эта ошибка.

1 голос
/ 23 сентября 2010

Эти пользователи используют прокси?Если в IE установлен прокси-сервер, возможно, информация собирается и вызывает ваши ошибки.

Кроме того, я согласен с Хью.Иногда GetLastError () может вводить в заблуждение.Если вы хотите использовать это, вы должны убедиться, что вы установили SetLastError (0), прежде чем сделать свой вызов, иначе вы могли бы получить код ошибки, установленный каким-либо предыдущим вызовом метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...