Страница: 1 | 2 |
Вопрос: Обновление программы
Добавлено: 23.10.07 15:59
Автор вопроса: Shark | Web-сайт:
Есть программа которая регулярно обновляется, как сделать чтобы программа сама себя заменяла новой версией обе версии в одной папке.
Ответы
Всего ответов: 17
Номер ответа: 1
Автор ответа:
mr. Ed
ICQ: 465041149
Вопросов: 15
Ответов: 16
Web-сайт:
Профиль | | #1
Добавлено: 23.10.07 17:53
Вот тебе пример,разберись,измени как надо.
Прежде всего вам нужен, к примеру, текстовой файл в Инете, в котором лежит необходимая информация о версии файла (в данном примере всего лишь дата последнего изменения программы - 2001_07_15). Также вам необходимо расположить на форме элемент Inet1 (меню Project|Components - Microsoft Internet Transfer Control 6.0) а также элемент CommandButton
Private Sub Command1_Click()
a$ = Inet1.OpenURL("http://sharig.webzone.ru/version.txt", icString)
'поскольку мы точно знаем, сколько символов в новой дате, то...
a$ = Mid(a$, 1, 10)
If a$ = "" Then
MsgBox "Сервер недоступен, попробуйте загрузить попозже.", vbOKOnly, "Обновление программы"
Exit Sub
End If
'вы можете предусмотреть (самостоятельно) с чем сравнивать новую дату (a$) с предыдущей ("2001-12-14"
If a$ <> "2001-12-14" Then
y$ = "На сервере появилась новая версия программы. Хотите загрузить?"
b$ = MsgBox(y$, vbYesNo, "Обновление программы"
'запуск броузера к странице загрузки программы
If b$ = 6 Then Shell ("C:\Program Files\Internet Explorer\IExplore -nohome" + "http://sharig.webzone.ru/IndexAbout.htm", vbMaximizedFocus
Else
MsgBox "На сервере старая версия"
End If
End Sub
Удачи!Если что непонятно-пиши в аську
Номер ответа: 2
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #2
Добавлено: 23.10.07 23:48
Я делаю иначе.
У меня есть два исполняемых файла: файл программы и файл обновлялки.
Жму в поге кнопку "Обновить", прога закрывается, а отрывается обновлялка (допустим, Update.exe).
Обновлялка лезет на сервер, смотрит последнюю версию, если есть версия новее той, что стоит у вас - сливает с ервера файл и заменяет им файл программы, предварительно сделав бэкап. Файл сливается по HTTP, реализовано все на сокетах.
Номер ответа: 3
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #3
Добавлено: 24.10.07 02:23
экзек шарит. но можно обойтись inet api, если не хоца морочицо с сокетами
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 24.10.07 04:01
Номер ответа: 5
Автор ответа:
gvozd
Разработчик Offline Client
Вопросов: 164
Ответов: 1317
Web-сайт:
Профиль | | #5
Добавлено: 24.10.07 09:14
А кто это?
Номер ответа: 6
Автор ответа:
Shark
ICQ: 284036855
Вопросов: 35
Ответов: 155
Web-сайт:
Профиль | | #6
Добавлено: 24.10.07 09:31
Скопировать обновленную версию я уже сделал, новая версия копируется в туже папку, мне надо чтобы программа сама себя заменяла на новую версию. Если использую вторую программу, первая не успевает закрыватся и происходит ошибка. Сейчас выполняется командный файл после закрытия программы, но если имя папки сложное, он не работает
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 24.10.07 14:01
2 Shark.
Запускаешь обновлялку и выключашся. Обновлялка даунлоадит новую версию, бекапит старую, новую переименовывает в старую, запускает прогу (которая уже обновлена) и выключается - обновление завершено.
Номер ответа: 8
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #8
Добавлено: 24.10.07 18:15
дооо) мы тут как бы давно зарегины, но не активны)
Shark
Так ты сделай загрузку новой версии из обновлялки. При этом основгая прога должна закрываться.
Ra$cal
не знал, что ты тут
Кста, посредством винсока все это просто делается, сокеты-то не на api пишу) Просто посредством inet api сложновато узнать сколько данных уже получено (сколько процентиков скачали), ибо InternetSetStatusCallback в VB не работает (а может я просто не смог ее заюзать правильно, но у меня не работает).
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 25.10.07 02:35
Да тут много кто на самом деле зареген, сидят только все тише воды, ниже травы...
Номер ответа: 10
Автор ответа:
Shark
ICQ: 284036855
Вопросов: 35
Ответов: 155
Web-сайт:
Профиль | | #10
Добавлено: 25.10.07 09:25
А как определить в программе обновлялке, когда программа выгрузилась, чтобы ее можно было обновить
Номер ответа: 11
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #11
Добавлено: 25.10.07 11:04
у тебя там мегасервер, который 10 минут выгружается?
ну а если уж надо, то как вариант сделать глобальный атом или искать процесс\окно. код щас приводить не буду, ибо с КПК сижу.
Номер ответа: 12
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #12
Добавлено: 25.10.07 14:46
Твоя прога:
Private Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal nAtom As Integer) As Integer
Const ATOM As String = "MyProg_runned"
Dim nAtom As Integer
Private Sub Form_Load()
' добавляем глобальный атом при запуске проги
nAtom = GlobalAddAtom(ATOM)
End Sub
Private Sub Form_Unload(Cancel As Integer)
' удаляем атом при выгрузке проги
GlobalDeleteAtom nAtom
End Sub
Обновлялка:
Private Declare Function GlobalFindAtom Lib "kernel32" Alias "GlobalFindAtomA" (ByVal lpString As String) As Integer
Const ATOM As String = "MyProg_runned"
Dim nAtom As Integer
Private Sub Form_Load()
' ищем атом
nAtom = GlobalFindAtom(ATOM)
Do While nAtom = 0
' тут можно таймаут сделать, но я опущу
nAtom = GlobalFindAtom(ATOM)
DoEvents
Loop
' удаляем его
GlobalDeleteAtom nAtom
' ...............
End Sub
Номер ответа: 13
Автор ответа:
Shark
ICQ: 284036855
Вопросов: 35
Ответов: 155
Web-сайт:
Профиль | | #13
Добавлено: 25.10.07 14:48
нет не мега сервер, но при завершении секунд 20-30 надо, много чего по сети проверить надо
Номер ответа: 14
Автор ответа:
Shark
ICQ: 284036855
Вопросов: 35
Ответов: 155
Web-сайт:
Профиль | | #14
Добавлено: 25.10.07 15:01
А можно немножко меня просветить, что это за атомы, это супер глобальная переменная?
Номер ответа: 15
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #15
Добавлено: 25.10.07 15:09
Цитирую MSDN. Переводить не буду, ибо не охота.
About Atom Tables
The system provides a number of atom tables. Each atom table serves a different purpose. For example, dynamic data exchange (DDE) applications use the global atom table to share item-name and topic-name strings with other applications. Rather than passing actual strings, a DDE application passes global atoms to its partner application. The partner uses the atoms to obtain the strings from the atom table.
Applications can use local atom tables to store their own item-name associations.