powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обновление клиентских приложений
9 сообщений из 9, страница 1 из 1
Обновление клиентских приложений
    #33219521
KuzVit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть клиентское приложение, написанное на VB 6.0, и работающее с базой данных на сервере MS SQL Server.

На данный момент обновление клиентских приложений происходит путем копирования новой версии файла на машины.
Но почти всегда бывает так, что какие-то машины не включены, получается рассинхронизация версий. И если изменения в программе коренные (например, вызов новой хранимой процедуры на сервере), то, как правило, старая версия уже не работает.

Как сделать так, чтобы при запуске программа проверяла, есть ли новая версия, и заменяла себя этой новой версией?

Я так понимаю, что сама себя она заменить не сможет, т.к. ОС не даст доступ к запущенному файлу.

Как вариант - сделать другой exe'шник, который и будет выполнять обновление приложения при запуске.

Опять же момент: откуда брать информацию о наличии новой версии и сами файлы? С базы MS SQL или можно обойтись *.ini файлом в расшаренной папке?

Наверняка многие сталкивались с этим, и, так или иначе, решали эту проблему.
Поделитесь, если не жалко.

P.S. Поиском на форуме не нашел ответа...
...
Рейтинг: 0 / 0
Обновление клиентских приложений
    #33219932
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сделать всю логику и формы в длл и загнать ее в двоичное поле на сервере, а в exe-клиенте только проводить авторизацию, забирать с сервера длл, перезаписывать, перерегистрировать, если изменился интерфейс (лучше делать неизменным), и подключаться через CreateObject.

А вообще как хочешь, так и делай. Сам же привел способ.
...
Рейтинг: 0 / 0
Обновление клиентских приложений
    #33220001
KuzVit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Узнал такую особенность Windows - запущенный exe'шник она удалить не даст, но переименовать - пожалуйста!

Значит, можно из приложения самого себя обновить через переименование...

Antonariy , спасибо, это хорошая идея. Может быть в следующем проекте я ей воспользуюсь. Сейчас уже все слишком далеко зашло, чтобы переделывать :(
...
Рейтинг: 0 / 0
Обновление клиентских приложений
    #33220144
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KuzVitЕсть клиентское приложение, написанное на VB 6.0, и работающее с базой данных на сервере MS SQL Server.

P.S. Поиском на форуме не нашел ответа...И я тоже не нашел, хотя когда-то упоминал о методе "вытаскивания самого себя за шнурки" (bootstrap).
1. Новую версию выкладываю на тот же комп, на котором находится SQL Server.
2. В момент загрузки приложения проверяется наличие нового exe-шника на сервере (п.1).
Если таковой есть, он копируется (без расширения - во избежание конфликта имён) на локальный комп в ту же директорию, что и исполняемое приложение.
Затем вызывается внешнее приложение Replacer.exe (ключевое слово для поиска на forum.sql.ru) , а текущий exe-шник немедленно завершает свою работу.
3. Replacer принудительно завершает работу всех экземпляров приложения, дожидается их выгрузки из системы, переименовывает старый exe-шник и добавляет расширение .exe к новой копии.
4. Replacer запускает новое приложение и завершает свою работу.
...
Рейтинг: 0 / 0
Обновление клиентских приложений
    #33220171
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.indigorose.com
здесь есть интересные решения, таблеток в сети хватает.
...
Рейтинг: 0 / 0
Обновление клиентских приложений
    #33220357
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KuzVit
Как сделать так, чтобы при запуске программа проверяла, есть ли новая версия, и заменяла себя этой новой версией?
Поделитесь, если не жалко.


Я реализовал это следующим образом.
1. Создается дистрибутив, выкладывается на сервер.
2. Его версия и путь к инсталлятору заносятся в табличку master.dbo.versions
3. При запуске каждое приложение сравнивает собственную версию с макчимальной версией, хранящейся в табличке.
4. Если версия устарела - запускается инсталлятор.
5. Инсталлятор перед непосредственно установкой запускает небольшую утилитку, которая завершает все процессы моих программ и выгружается. (исходник могу выложить).
6. Запускается процесс инсталляции.
...
Рейтинг: 0 / 0
Обновление клиентских приложений
    #33220375
KuzVit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Processor1. Новую версию выкладываю на тот же комп, на котором находится SQL Server.
А в каком виде - просто в папке, или на FTP?

big-duke , спасибо за ссылку
...
Рейтинг: 0 / 0
Обновление клиентских приложений
    #33220416
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KuzVit Processor1. Новую версию выкладываю на тот же комп, на котором находится SQL Server.
А в каком виде - просто в папке, или на FTP?

Просто в папочке с текущей датой. Но это не принципиально, можно дистрибутив хоть на SQL Server в поле Image запихнуть :) .
...
Рейтинг: 0 / 0
Обновление клиентских приложений
    #33225694
KuzVit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, сделал:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
Option Explicit

Public Function UpdateApplication() As Boolean
Const UpdatePath As String = "\\Сервер такой-то\Папка такая-то\"

Dim CurAppFile As String
Dim CurVersion As String
Dim NewVersion As String
Dim FullPath As String

Dim fso As FileSystemObject
Dim curfso As FileSystemObject

Set fso = New FileSystemObject

'Узнать версию запущенного приложения
CurVersion = App.Major & "." & App.Minor & ".0." & App.Revision

'Если файл приложения существует на сервере, то
CurAppFile = App.EXEName & ".exe"
FullPath = fso.BuildPath(UpdatePath, CurAppFile)
If fso.FileExists(FullPath) Then
    
    'Узнать версию файла на сервере
    NewVersion = fso.GetFileVersion(FullPath)
    
    'Если версия файла более новая, то
    If NewVersion > CurVersion Then
         
        'Переименуем запущенный файл
        Set curfso = New FileSystemObject
        If curfso.FileExists(App.Path & "\" & App.EXEName & ".bak") Then
            curfso.DeleteFile (App.Path & "\" & App.EXEName & ".bak")
        End If
        curfso.MoveFile App.Path & "\" & CurAppFile, App.Path & "\" & App.EXEName & ".bak"
        
        'Копируем с сервера
        fso.CopyFile FullPath, App.Path & "\" & CurAppFile, True
        
        'Запускаем новый файл
        Shell App.Path & "\" & CurAppFile, vbNormalFocus
        
        'Выход из программы
        Set curfso = Nothing
        UpdateApplication = True
        
    Else
 
        UpdateApplication = False

    End If
Else

    UpdateApplication = False

End If

Set fso = Nothing

End Function

Private Sub Command1_Click()
 If UpdateApplication() Then
    Form1.Hide
    Unload Form1
 End If
End Sub

Все работает, спасибо всем за помощь, узнал много нового...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обновление клиентских приложений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]