Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Обновление программы Добавлено: 23.10.07 15:59  

Автор вопроса:  Shark | Web-сайт: www.ma26.ru | ICQ: 284036855 
Есть программа которая регулярно обновляется, как сделать чтобы программа сама себя заменяла новой версией обе версии в одной папке.

Ответить

  Ответы Всего ответов: 17  

Номер ответа: 1
Автор ответа:
 mr. Ed



ICQ: 465041149 

Вопросов: 15
Ответов: 16
 Web-сайт: vario.org.ru
 Профиль | | #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-сайт: domkratt.com
 Профиль | | #2
Добавлено: 23.10.07 23:48
Я делаю иначе.
У меня есть два исполняемых файла: файл программы и файл обновлялки.
Жму в поге кнопку "Обновить", прога закрывается, а отрывается обновлялка (допустим, Update.exe).
Обновлялка лезет на сервер, смотрит последнюю версию, если есть версия новее той, что стоит у вас - сливает с ервера файл и заменяет им файл программы, предварительно сделав бэкап. Файл сливается по HTTP, реализовано все на сокетах.

Ответить

Номер ответа: 3
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #3
Добавлено: 24.10.07 02:23
=) экзек шарит. но можно обойтись inet api, если не хоца морочицо с сокетами

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 24.10.07 04:01
Executioner
оо :) Какие люди, Welcome to МИТуе :)

Ответить

Номер ответа: 5
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #5
Добавлено: 24.10.07 09:14
А кто это?

Ответить

Номер ответа: 6
Автор ответа:
 Shark



ICQ: 284036855 

Вопросов: 35
Ответов: 155
 Web-сайт: www.ma26.ru
 Профиль | | #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-сайт: domkratt.com
 Профиль | | #8
Добавлено: 24.10.07 18:15
HACKER

дооо) мы тут как бы давно зарегины, но не активны)
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-сайт: www.ma26.ru
 Профиль | | #10
Добавлено: 25.10.07 09:25
А как определить в программе обновлялке, когда программа выгрузилась, чтобы ее можно было обновить

Ответить

Номер ответа: 11
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #11
Добавлено: 25.10.07 11:04
у тебя там мегасервер, который 10 минут выгружается? =)
ну а если уж надо, то как вариант сделать глобальный атом или искать процесс\окно. код щас приводить не буду, ибо с КПК сижу.

Ответить

Номер ответа: 12
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #12
Добавлено: 25.10.07 14:46
Твоя прога:
Private Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString As String) As Integer
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 GlobalDeleteAtom Lib "kernel32" (ByVal nAtom As Integer) As Integer
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-сайт: www.ma26.ru
 Профиль | | #13
Добавлено: 25.10.07 14:48
нет не мега сервер, но при завершении секунд 20-30 надо, много чего по сети проверить надо

Ответить

Номер ответа: 14
Автор ответа:
 Shark



ICQ: 284036855 

Вопросов: 35
Ответов: 155
 Web-сайт: www.ma26.ru
 Профиль | | #14
Добавлено: 25.10.07 15:01
А можно немножко меня просветить, что это за атомы, это супер глобальная переменная?

Ответить

Номер ответа: 15
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #15
Добавлено: 25.10.07 15:09
Цитирую MSDN. Переводить не буду, ибо не охота.
An atom table is a system-defined table that stores strings and corresponding identifiers. An application places a string in an atom table and receives a 16-bit integer, called an atom, that can be used to access the string. A string that has been placed in an atom table is called an atom name.

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.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам