Форум » [x]Harbour » Как сделать обновление программы из инета ? » Ответить

Как сделать обновление программы из инета ?

Andrey: Всем привет. Нужно делать обновление программы из инета. Чтоб пользователь нажал кнопочку "Обновить программу" и она обновилась. Куда файлы обновления выкладывать ? Завести сайт и т.д ? Поделитесь опытом, как сделать.

Ответов - 46, стр: 1 2 3 All

Andrey: Набрел тут в поиске: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1138 Модуль просто подключается к проекту. В секции инициализации запускаем поток. В потоке делаем следующее: Проверяем наличие bak файла, который мог остаться от предыдущего обновления и если находим - удаляем. Сравниваем дату изменения локального файла и файла, находящегося на сервере. Если необходимо обновление - копируем файл с сервера в файл "bak1". Еще один промежуточный файл используется для уменьшения вероятности нарваться на сбой в программе, когда у нас не окажется в папке файла с оригинальным названием. Переименовываем оригинал в файл с расширением "bak" . Восстанавливаем оригинал из файла "bak1" Далее - на любителя. Можно попытаться предупредить пользователя и заставить его перезапустить программу. Или оставить все, как есть. Этот способ проверен на WinNt4 и Win2000. Прав особых пользователям не надо. Самая интригующая фраза: "В секции инициализации запускаем поток. В потоке делаем следующее:" Кто пользовался потоками ? Надежно ли это для хХарбора ?

Dima: Andrey пишет: Кто пользовался потоками ? Надежно ли это для хХарбора ? В Harbour использую , нормально работает. Юзаю 2 потока. В одном потоке архивирую базу данных через определенные промежутки времени. Во втором....ну там целая кучка всего. Прием заявок , отправка зявок по мылу и фтп и кучка всего другого. Тема о потоках на форуме есть.

Andrey: Dima пишет: В одном потоке архивирую базу данных через определенные промежутки времени. А быстро делает архив ? В смысле, сколько вемени затрачивается через поток и напрямую ? Dima пишет: Во втором....ну там целая кучка всего. Прием заявок , отправка зявок по мылу и фтп и кучка всего другого. Не падает ничего ? Надежно работает ? Dima пишет: Тема о потоках на форуме есть. Читал. Пока мало понял. Пока разбираюсь. Спасибо большое, что эту тему развил. Может сделаешь небольшое руководство с примером по этой теме ?


Dima: Andrey пишет: А быстро делает архив ? В смысле, сколько вемени затрачивается через поток и напрямую ? Не важно. Время одинаково. Andrey пишет: Не падает ничего ? Надежно работает ? я же вроде писал , все хорошо ;) Andrey пишет: Может сделаешь небольшое руководство с примером по этой теме ? Там же есть пример что Петр показал. Думай. Если что спрашивай.

Sergey Spirin: Andrey пишет: Самая интригующая фраза: "В секции инициализации запускаем поток. В потоке делаем следующее:" Андрей, в приведенном описании нет особо ничего, что отдельного потока бы требовало. Это так просто в примере. Делай, просто как обычно, в основном потоке, да и все... А то "наступишь" на все что- можно наступить

Andrey: Sergey Spirin пишет: А то "наступишь" на все что- можно наступить Ну а как же без этого !!! Нужно держаться лозунга: Мы не ищем простых путей ....

PSP: hb_ThreadStart() - запускает поток. В сборке Harbour есть примеры. Про xX не скажу, не знаю.

Andrey: Сделал обновление программы из Инета. Начал пробовать, и облом.... У меня нормально считывается, а в другом городе нет. Возвращает что интернет не доступен ??? Хотя скайп и TeamViewer работает. Использую функцию IsConnectedInet() возвращает .F. Код брал здесь на форуме: /////////////////////////////////////////////////////////// #define DC_CALL_STD 0x0020 #define INTERNET_CONNECTION_MODEM 1 #define INTERNET_CONNECTION_LAN 2 #define INTERNET_CONNECTION_PROXY 4 #define INTERNET_RAS_INSTALLED 16 #define INTERNET_CONNECTION_OFFLINE 32 #define INTERNET_CONNECTION_CONFIGURED 64 // Flag for InternetCheckConnection #define FLAG_ICC_FORCE_CONNECTION 1 FUNCTION IsConnectedInet() local nFlags := 0 local lRet := .f. if DllCall( "WININET.DLL", DC_CALL_STD, "InternetGetConnectedState", @nFlags, 0 ) == 1 if DllCall( "WININET.DLL", DC_CALL_STD, "InternetCheckConnection", "http://www.google.com", FLAG_ICC_FORCE_CONNECTION, 0 ) == 1 lRet := .t. endif endif Return lRet Как такое может быть - один и тот же код работает по разному ?

PSP: Что-то блокирует достут твоей программе в интернет. К примеру, фаервол. Нужно разрешить ей доступ. Andrey пишет: Хотя скайп и TeamViewer работает Эти программы обычно принимаются фаерволами как доверенные. Как такое может быть - один и тот же код работает по разному ? Он работает одинаково. Система реагирует по-разному.

Andrey: Andrey пишет: Возвращает что интернет не доступен ??? Хотя скайп и TeamViewer работает. PSP пишет: Он работает одинаково. Система реагирует по-разному. Точно. На компе стоит ПРОКСИ. Т.е. в IE стоит: Как (или чем) можно определить что ИНЕТ работает через ПРОКСИ ? Есть ли на хХарборе такая возможность ? И как определить мне какой адрес прокси используется ?

PSP: Andrey пишет: И как определить мне какой адрес прокси используется ? Раздел реестра [pre2][HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings][/pre2] параметр [pre2]ProxyServer[/pre2]

PSP: Добавлю: ProxyEnable в этом же разделе будет установлен в 1, если прокси используется.

Andrey: PSP пишет: Добавлю: ProxyEnable в этом же разделе будет установлен в 1, если прокси используется. Спасибо БОЛЬШОЕ ! Где прокси стоит, даже скайп обновиться не смог !

Andrey: Народ, помогите определить работоспособность кода. Может что забыл.... У меня прокси нет... //-------------------------------------------------------------------- /* Registry related values Winreg.ch */ /* Help for xHarbour */ #define HKEY_LOCAL_MACHINE 0 #define HKEY_CLASSES_ROOT 1 #define HKEY_CURRENT_USER 2 #define HKEY_CURRENT_CONFIG 3 //#define HKEY_LOCAL_MACHINE 4 #define HKEY_USERS 5 FUNCTION MAIN() LOCAL lWinNT := IsWinNT(), nRet, cError := "" SETCOLOR("15/1") CLEAR SCREEN ? " Test functions ProxyServer for [x]Harbour." ? " Verchenko A.G., Dmitrov an e-mail:verchenkoag@gmail.com is written" ? PADC("",70,"-") ? " " + Version() + " - " + hb_compiler() ? ; ? cError := "" nRet := MyIsProxyServer(@cError) IF nRet == 1 ? "Proxy - Yes ! Adres - "+cError IEXPLORER("http://www.xharbour.org") ELSEIF nRet == 0 ? "Proxy - Not...." ELSE ? "Proxy - error: "+cError ENDIF ? wait RETURN NIL //-------------------------------------------------------------------- Function MyIsProxyServer(cError) LOCAL lWinNT := IsWinNT(), nFlag, nRet := 0, cKey IF lWinNT nFlag := GetRegistry( HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable" ) IF nFlag > 0 cKey := GetRegistry( HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyServer" ) IF cKey == NIL cError := "Not key ProxyServer for " + OS_MyVersion() nRet := -2 ELSE cError := Ltrim( cKey ) nRet := 1 ENDIF ELSE cError := "0" nRet := 0 ENDIF ELSE cError := "None ProxyServer for " + OS_MyVersion() nRet := -1 ENDIF return nRet //-------------------------------------------------------------------- Function IsWinNT() RETURN OS_ISWINNT() //-------------------------------------------------------------------- FUNCTION OS_MyVersion() // Какая Платформа Windows LOCAL cRet := "None" IF OS_ISWIN95() ; cRet := "WIN95" ; ENDIF IF OS_ISWIN98() ; cRet := "WIN98" ; ENDIF IF OS_ISWINME() ; cRet := "WINME" ; ENDIF IF OS_ISWINNT351() ; cRet := "NT351" ; ENDIF IF OS_ISWINNT4() ; cRet := "NT4" ; ENDIF IF OS_ISWIN2000() ; cRet := "WIN2000" ; ENDIF IF OS_ISWINXP() ; cRet := "WINXP" ; ENDIF IF OS_ISWIN2003() ; cRet := "WIN2003" ; ENDIF IF OS_ISWINVISTA() ; cRet := "VISTA" ; ENDIF //IF OS_ISWIN7() ; cRet := "WIN7" ; ENDIF // Not function for xHarbor 1.0.0 RETURN cRet //-------------------------------------------------------------------- STATIC PROCEDURE IEXPLORER(cURL) LOCAL oIE TRY oIE := GetActiveObject( "InternetExplorer.Application" ) CATCH TRY oIE := CreateObject( "InternetExplorer.Application" ) CATCH Alert( "ERROR! IExplorer not avialable. [" + Ole2TxtError()+ "]" ) RETURN END END oIE:Visible := .T. oIE:Navigate( cURL ) RETURN //--------------------------------------------------------------------

santy: Привет Андрей. У меня работает. Проверяет активен ли прокси, если да, то запускает експлорер. Кажется всё гуд :)

Andrey: santy Спасибо большое ! Значит работает...

Andrey: PSP пишет: Добавлю: ProxyEnable в этом же разделе будет установлен в 1, если прокси используется. Поставили сервер Windows 2008 R2 Server 6.01.7601 Service Pack 1 У меня задача стала падать при обновлении... Переменная nFlag - неопределенная - т.е. возвращает U nFlag := GetRegistry( HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable" ) Что делать ? Как еще 2012 сервер в будущем определяться будет ?

Dima: Andrey Руками в реестре смотрел на предмет этой ветки и параметра ?

Andrey: Dima пишет: Руками в реестре смотрел на предмет этой ветки и параметра ? Да нет такого параметра: Скорей всего, изменения в реестре произошли. Т.е. по умолчанию, если не настраивался ПРОКСИ, то и параметров никаких нет.

Dima: Andrey Тогда гуглить надо скажем такой строкой Windows 2008 R2 Server ProxyEnable и выяснить куда мелкие его заныкали



полная версия страницы