Загрузить файл через IE, дождаться завершения и отловить если что ошибки - VB
Формулировка задачи:
Ну собственно, задачка:
1) Загрузить файл из указанного адреса в указанное место (напрашивается %temp%).
2) Если ошибка, сообщить об этом юзеру
3) Если OK, запустить на исполнение
Чего хочу и не хочу
1) Обязательно стандартное окно загрузки в стиле тек. OS, т.е. IE -никаких самопалов.
2) Никаких OCX, Internet Controls т.е. без VB-наворотов
В каких ситуациях
1) Загрузка и установка новой версии программы
2) Загрузка и запуск .NET инсталлера при необходимости
(вариант с .NET 3.5 несмотря на компактный "интернет-инсталлер" слишком громоздский по объему закачки/установки и для меня избыточный, а скажем .NET 2.0 SP1-2 -только полные версии и включать их в дистрибутив очень громоздко, а закачать при необх. целиком в самый раз).
Состряпал пока примитивный код:
Ну, плюс что никаких OCX, ибо объект берется "из системы".
On Error естественно отлавливает только невозможность создать объект InternetExplorer, что малореально.
отсутствие Visible нужно чтоб не показывать окно браузера.
Стандартных ошибок оно не отлавливает
1) нет коннекта к интернету
2) файл недоступен (а провайдер в этом случае подсунет свою страничку)
ну и т.п.
причем visible=false в случае ошибки еще и останется в процессах как IExplorer.
Ну, допустим, в случае "Загрузка новой версии" еще куда ни шло, т.к. коннект с интернетом до этого проверяется более грамотным кодом и предложения загрузить не поступит, если короткий инф-файл не считался из интернета...
В общем по большому счету идея правильная, реализация никакая. Какие рекомендации?
Командная строка типа
shellandcontinue(rundll32 bla-bla-bla ...) кстати вполне бы устроила...
1) Загрузить файл из указанного адреса в указанное место (напрашивается %temp%).
2) Если ошибка, сообщить об этом юзеру
3) Если OK, запустить на исполнение
Чего хочу и не хочу
1) Обязательно стандартное окно загрузки в стиле тек. OS, т.е. IE -никаких самопалов.
2) Никаких OCX, Internet Controls т.е. без VB-наворотов
В каких ситуациях
1) Загрузка и установка новой версии программы
2) Загрузка и запуск .NET инсталлера при необходимости
(вариант с .NET 3.5 несмотря на компактный "интернет-инсталлер" слишком громоздский по объему закачки/установки и для меня избыточный, а скажем .NET 2.0 SP1-2 -только полные версии и включать их в дистрибутив очень громоздко, а закачать при необх. целиком в самый раз).
Состряпал пока примитивный код:
Ну, плюс что никаких OCX, ибо объект берется "из системы".
On Error естественно отлавливает только невозможность создать объект InternetExplorer, что малореально.
отсутствие Visible нужно чтоб не показывать окно браузера.
Стандартных ошибок оно не отлавливает
1) нет коннекта к интернету
2) файл недоступен (а провайдер в этом случае подсунет свою страничку)
ну и т.п.
причем visible=false в случае ошибки еще и останется в процессах как IExplorer.
Ну, допустим, в случае "Загрузка новой версии" еще куда ни шло, т.к. коннект с интернетом до этого проверяется более грамотным кодом и предложения загрузить не поступит, если короткий инф-файл не считался из интернета...
В общем по большому счету идея правильная, реализация никакая. Какие рекомендации?
Командная строка типа
shellandcontinue(rundll32 bla-bla-bla ...) кстати вполне бы устроила...
Решение задачи: «Загрузить файл через IE, дождаться завершения и отловить если что ошибки»
textual
Листинг программы
<font color="blue">Option</font> <font color="blue">Explicit</font> <font color="blue">Private</font> <font color="blue">Declare</font> <font color="blue">Function</font> URLDownloadToFileA Lib <font color="teal">"urlmon"</font> (<font color="blue">ByVal</font> pCaller <font color="blue">As</font> <font color="blue">Long</font>, _ <font color="blue">ByVal</font> szURL <font color="blue">As</font> <font color="blue">String</font>, <font color="blue">ByVal</font> szFileName <font color="blue">As</font> <font color="blue">String</font>, <font color="blue">ByVal</font> dwReserved <font color="blue">As</font> <font color="blue">Long</font>, _ <font color="blue">ByVal</font> lpfnCB <font color="blue">As</font> <font color="blue">Long</font>) <font color="blue">As</font> <font color="blue">Long</font> <font color="blue">Private</font> <font color="blue">Sub</font> Example() <font color="#00AA00">'From All API</font> <font color="#00AA00">'example by Matthew Gates (Puff0rz@hotmail.com)</font> DownloadFile _ <font color="teal">"http://www.vbaexpress.com/forum/attachment.php?attachmentid=2305&d=1258660962"</font>, _ <font color="teal">"C:\Test\TestDownload.zip"</font> <font color="blue">End</font> <font color="blue">Sub</font> <font color="blue">Public</font> <font color="blue">Function</font> DownloadFile(URL <font color="blue">As</font> <font color="blue">String</font>, LocalFilename <font color="blue">As</font> <font color="blue">String</font>) <font color="blue">As</font> <font color="blue">Boolean</font> <font color="blue">Dim</font> lngRetVal <font color="blue">As</font> <font color="blue">Long</font> lngRetVal = URLDownloadToFileA(<font color="darkblue"><b>0</b></font>, URL, LocalFilename, <font color="darkblue"><b>0</b></font>, <font color="darkblue"><b>0</b></font>) <font color="blue">If</font> lngRetVal = <font color="darkblue"><b>0</b></font> <font color="blue">Then</font> DownloadFile = True <font color="blue">End</font> <font color="blue">Function</font>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д