On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 1771
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.05.11 18:02. Заголовок: Как сделать обновление программы из инета ?


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


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 46 , стр: 1 2 3 All [только новые]


постоянный участник


Пост N: 527
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 31.05.11 19:43. Заголовок: Andrey пишет: Завес..


Andrey пишет:

 цитата:
Завести сайт и т.д ?


Сайт не нужен. Нужен статический адрес в инете, за которым будет стоять сервер. На сервере запущена прога, которая слушает какой-то порт. Если на этот порт приходит запрос из вне, прога, после определенной процедуры аутентификации, должна либо разрешить соединение и выдать данные, либо отказать. Как-то так... :)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 528
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 31.05.11 19:59. Заголовок: P.S. Можно попробова..


P.S. Можно попробовать сначала без статического адреса, с помощью сервиса dyndns.com, к примеру. Но возможны глюки. Статический все-таки лучше...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1772
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.05.11 20:42. Заголовок: PSP пишет: Нужен ст..


PSP пишет:

 цитата:
Нужен статический адрес в инете, за которым будет стоять сервер.


Т.е. мне нужно будет держать свой сервер и иметь постоянный доступ в инет ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 530
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 31.05.11 21:01. Заголовок: Andrey пишет: Т.е. ..


Andrey пишет:

 цитата:
Т.е. мне нужно будет держать свой сервер


Ну да...

 цитата:
и иметь постоянный доступ в инет ?


Ну да... :) Можно, конечно, давать доступ по расписанию, но какой в этом смысл? :)


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1773
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.05.11 21:21. Заголовок: Не хотелось бы иметь..


Не хотелось бы иметь свой сервер. Лучше уж на странице сайта выложить и забыть.
Только как скачать программно файл (обновления программы) со страницы сайта ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 99
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 31.05.11 21:25. Заголовок: Через FTP..


Через FTP

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 219
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 31.05.11 21:54. Заголовок: Andrey пишет: как с..


Andrey пишет:

 цитата:
как скачать программно файл (обновления программы) со страницы сайта ?


Вот пример процедуры обновления из исходников HMGS-IDE:

 цитата:

*************************************************
PROCEDURE DownloadFromWWW( cURL, cLocalFileName )
*************************************************
LOCAL oCon, oUrl, i

cLocalFileName := alltrim(cLocalFileName)
nresp := isinternet()

if nresp = .f.
msgbox('Internet is not connected. Update is aborted')
return
endif

oUrl := TURL():New( cUrl )
oCon := TipClientHttp():New( oUrl )
oCon:nConnTimeout := 20000

//MsgBox("Connecting with "+ oUrl:cServer)
//msgbox('localfile= ' +clocalfilename)
IF oCon:Open( cUrl )

//MsgBox("Connection established." +chr(10)+"Press OK to retrieve " + oUrl:cPath +oUrl:cFile)
oCon:WriteAll(cLocalFileName)
//MsgBox("Downloaded...")
oCon:Close()

FORM()

ELSE
MsgBox("Can't connect with "+ oUrl:cServer)
IF oCon:SocketCon == NIL
MsgBox("Connection not initiated")
ELSEIF hb_InetErrorCode( oCon:SocketCon ) == 0
MsgBox("Server sayed: "+ oCon:cReply)
ELSE
MsgBox("Error in connection: " + hb_InetErrorDesc( oCon:SocketCon ))
ENDIF
ENDIF
RETURN


****************
PROCEDURE FORM()
****************

DEFINE WINDOW Form_2 ;
AT 0, 0 ;
WIDTH 400 HEIGHT 215 ;
TITLE "Extracting sources of HMGS_IDE to \Updates folder" ;
NOMAXIMIZE NOSIZE ;
FONT "Arial" SIZE 9;
ON INIT UNZIPFILE()

DEFINE PROGRESSBAR ProgressBar_1
ROW 60
COL 45
WIDTH 310
HEIGHT 30
RANGEMIN 0
RANGEMAX 10
VALUE 0
FORECOLOR {0,130,0}
END PROGRESSBAR

DEFINE LABEL Label_1
ROW 100
COL 25
WIDTH 350
HEIGHT 20
VALUE ""
FONTNAME "Arial"
FONTSIZE 10
TOOLTIP ""
FONTBOLD .T.
TRANSPARENT .T.
CENTERALIGN .T.
END LABEL

ON KEY ESCAPE ACTION Form_2.Release

END WINDOW

CENTER WINDOW Form_2
ACTIVATE WINDOW Form_2

RETURN

*********************
PROCEDURE UnzipFile()
*********************
cCurDir := getstartupfolder()
cArchive := cCurDir +"\ide.zip"
//MSGBOX('CCURDIR= ' + CCURDIR)
Form_2.ProgressBar_1.RangeMin := 1
Form_2.ProgressBar_1.RangeMax := Len( HB_GetFilesInZip(cArchive) ) - 1

RENAME ( cCurDir+'\IDE.EXE' ) TO ( cCurDir+'\IDEOLD.EXE' )

UNCOMPRESS cArchive ;
EXTRACTPATH cCurDir + "\Updates" ;
BLOCK {|cFile, nPos| ProgressUpdate( nPos, cFile, .T. ) } ;
CREATEDIR

COPY FILE ( cCurDir +'\UPDATES\BIN\IDE.EXE' ) TO ( cCurDir +'\IDENEW.EXE' )
EXECUTE FILE ( cCurDir +'\IDENEW.EXE' )

adata[ _DISABLEWARNINGS ] := '.T.'
EXIT()

RETURN

*******************************************************
Function ProgressUpdate( nPos , cFile , lShowFileName )
*******************************************************

Default lShowFileName := .F.

Form_2.ProgressBar_1.Value := nPos
Form_2.Label_1.Value := cFileNoPath( cFile )

DO EVENTS

if lShowFileName
INKEY(.1)
endif

Return Nil

*********************
Function IsInternet()
*********************
LOCAL nEstado, cConexion := ""

nEstado := InternetGetConnectedStateEx(0, @cConexion, 0, 0)

Return (nEstado == 1)

*******************************************************************************************
function InternetGetConnectedStateEx(lpdwFlags, lpszConnectionName, dwNameLen, dwReserved )
*******************************************************************************************
local uResult
local hInstDLL := LoadLibrary("WININET.DLL")

local nProcAddr := GetProcAddress(hInstDLL,"InternetGetConnectedStateEx")

uResult := CallDLL(hInstDLL, nProcAddr,, 4, 4, lpdwFlags, 10, lpszConnectionName, 3, dwNameLen, 4, dwReserved )

FreeLibrary(hInstDLL)
return uResult


Надеюсь, что идея понятна...


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1774
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.05.11 23:53. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Вот пример процедуры обновления из исходников HMGS-IDE:


Спасибо большое !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1778
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.06.11 06:49. Заголовок: Что-то с теорией не ..


Что-то с теорией не все понятно.....
Допустим на странице сайта http://www.hmgextended.com/files/CONTRIB/ есть несколько обновлений:
hmg-1.9-96-setup.zip
hmg-1.9-95-setup.zip
hmg-1.9-89-setup.zip

Как на хХарборе или Харборе получить список обновлений и скачать последнее обновление ?


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 196
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 02.06.11 09:33. Заголовок: Andrey пишет: Как н..


Andrey пишет:

 цитата:
Как на хХарборе или Харборе получить список обновлений и скачать последнее обновление ?



Вот рабочий пример на харбор обновления баз для программы по законодательству, дополнительно использую wget (при обрыве есть докачка), может кому пригодится:

nau.ini
-------------------------------------------------
# кусок имени файла
str_nau = nau9
# опция для wget докачка
str_opt = -c
# где расположен wget
str_run = c:\sbin\wget\wget
# откуда качать
str_url = http://updates.nau.kiev.ua/

[FILES]
# последний номер закач. обновления
sud=1981
ukr=1770

# end of nau.ini

Дальше сама ф-я
FUNC main()

LOCAL hIni := hb_IniRead( "nau.ini" ), ckey, asect, str_cmd, str_nau
LOCAL arj_file, ifile, str1 := ""

str_nau := hini["MAIN"]["str_nau"]
str_cmd := hini["MAIN"]["str_run"] + " " + ;
hini["MAIN"]["str_opt"] + " " + ;
hini["MAIN"]["str_url"] + ;
str_nau + "/"

asect := hini["FILES"]
for each ckey in asect:keys
if ! hb_direxists("."+ckey)
makedir(ckey)
endif
next
for EACH ckey in asect:keys
arj_file := 1
WHILE .T.
nnFile := AllTrim( Str( Val(asect[ckey] ) + arj_file ) )
xFile := str_cmd + ckey + "/" + str_nau + SubStr( ckey, 1, 1 ) + nnfile + "."
/* 1st step - try to get the arj*/
IF hb_processRun( xFile + "arj"+" -P ./"+cKey,,@str1 ) == 0
/* 2nd step - try to get the a01, a02, ...*/
ifile := 1
WHILE .T.
IF hb_processRun( xFile + "a" + StrZero( ifile, 2 )+ " -P ./"+cKey ) == 0
ifile ++
ELSE
aSect[ckey] := nnfile
EXIT
ENDIF
ENDDO
ELSE
EXIT
ENDIF
ENDDO
next
hb_IniWrite( "nau.ini", hIni )
RETURN nil

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1779
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.06.11 14:46. Заголовок: AlexMyr пишет: може..


AlexMyr пишет:

 цитата:
может кому пригодится:


Конечно пригодиться. Спасибо большое.

Не нашел функции в хХарборе hb_processRun ! Чем можно заменить ? Или перетащить из Харбора ?


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 197
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 02.06.11 15:10. Заголовок: Andrey пишет: Чем м..


Andrey пишет:

 цитата:
Чем можно заменить ?



Я так думаю, что можно прикрутить __run, взял с misc.txt

/* $DOC$
* $FUNCNAME$
* __RUN()
* $CATEGORY$
* DOS
* $ONELINER$
* Run an external program.
* $SYNTAX$
* __RUN( <cCommand> )

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1780
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.06.11 16:28. Заголовок: AlexMyr пишет: Я та..


AlexMyr пишет:

 цитата:
Я так думаю, что можно прикрутить __run



Уж лучше тогда ShellExecute(GetDeskTopWindow(), 'open',cRunBatFile, "", "" , SW_SHOWNORMAL) !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1870
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.09.11 16:05. Заголовок: С технолигией скачки..


С технолигией скачки обновления программы разобрался.
Спасибо всем БОЛЬШОЕ !

Теперь дальше вопрос: скачал я допустим MyUpdate-012.zip c инета, распаковал и заменил нужные мне файлы.
А ехе-ник то мой в памяти, как мне его заменить НОВЫМ ?

Т.е. запущена программа MyProga.EXE, мне нужно её завершить, скопировать из другой папки новую программу MyProga.EXE и запустить ее. Так можно сделать или нет ?
Ручками то просто получается, а юзера то не разбираются в этом.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 578
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 01.09.11 19:48. Заголовок: Пример: твоя MyProga..


Пример: твоя MyProga.exe обнаруживает обновление. Информирует юзера, что нужно обновиться. Юзер соглашается. Прога завершается, а последняя выполненная строка - вызов MyProgaUpdate.exe (к примеру). Последняя копирует все, что нужно обновить, и завершается. А последняя строка в ней - вызов MyProga.exe


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1871
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.09.11 22:30. Заголовок: PSP Спасибо. :sm36..


PSP
Спасибо.
А как нибудь по хитрому нельзя, выгрузиться (завершить) работу и запусть временный бат-ник с копированием и запуском нового уже ехе-ника ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2116
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.09.11 23:16. Заголовок: Andrey По хитрому д..


Andrey
По хитрому думаю можно включая перезагрузку компа и доработку проги в этом плане (не большую)

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 02.09.11 05:40. Заголовок: Замена проги


Вариант не временного, а постоянного батника- для однопользовательского режима
( когда не занят EXE-файл другими процессами)
При обновлении - MyProga.exe создает новый EXE - NewMyProga.exe
который переименуется внутри батника
---------------MyProga.cmd----------
if exist NewMyProga.exe goto 2
:1
MyProga.exe
if not exist NewMyProga.exe goto 3
:2
ren NewMyProga.exe MyProga.exe
goto 1
:3

Спасибо: 0 
Цитата Ответить
постоянный участник


Пост N: 579
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 02.09.11 12:15. Заголовок: Andrey пишет: выгру..


Andrey пишет:

 цитата:
выгрузиться (завершить) работу и запусть временный бат-ник с копированием и запуском нового уже ехе-ника ?


Перед завершением MyProga.exe создает этот самый батник сама, запускает его. Батник все копирует, запускает MyProga.exe. Она уже при старте удаляет батник.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1874
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.09.11 15:27. Заголовок: Спасибо большое всем..


Спасибо большое всем.
Это явное решение. В принципе нормальное.

А кто знает как другие программы делают эту операцию обновления ???

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 46 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 619
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет