Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как заменить exe-файл? / 14 сообщений из 14, страница 1 из 1
06.03.2007, 15:10
    #34374786
Romka_84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Всем здраствуйте. Подскажите пожайлуста, как можно при работающей программе заменить её exe-файл? Т.е. ситуация следующая: есть работающая программа, пользователь нажимает кнопочку "Обновление", программа берет новый екзешник(например из инета, иль с диска), заменяет его, вместо своего, и просит перезапуститься, при перезапуске работает уже новый екзе-файл.
...
Рейтинг: 0 / 0
06.03.2007, 16:25
    #34375079
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Romka_84Всем здраствуйте. Подскажите пожайлуста, как можно при работающей программе заменить её exe-файл? Т.е. ситуация следующая: есть работающая программа, пользователь нажимает кнопочку "Обновление", программа берет новый екзешник(например из инета, иль с диска), заменяет его, вместо своего, и просит перезапуститься, при перезапуске работает уже новый екзе-файл.

Программа переименовывает сама себя (скажем в MyProg.ex~) и на свое место пишет новый файл. После чего запускает его. Ну а при запуске файл MyProg.ex~ удаляется...
...
Рейтинг: 0 / 0
06.03.2007, 18:58
    #34375658
FAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Но пока программа не закрылась будет работать старая версия.
...
Рейтинг: 0 / 0
07.03.2007, 10:48
    #34376724
Romka_84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
AndrF Romka_84Всем здраствуйте. Подскажите пожайлуста, как можно при работающей программе заменить её exe-файл? Т.е. ситуация следующая: есть работающая программа, пользователь нажимает кнопочку "Обновление", программа берет новый екзешник(например из инета, иль с диска), заменяет его, вместо своего, и просит перезапуститься, при перезапуске работает уже новый екзе-файл.

Программа переименовывает сама себя (скажем в MyProg.ex~) и на свое место пишет новый файл. После чего запускает его. Ну а при запуске файл MyProg.ex~ удаляется...

Спасибо, идея понятна. Теперь вопрос в следующем: а как работающий екзешник переименует сам себя, т.е. как собственно в коде это выглядеть будет? Чет я таких и функций то не знаю.
...
Рейтинг: 0 / 0
07.03.2007, 13:09
    #34377259
FAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Учить DOS. Как вариант.
...
Рейтинг: 0 / 0
07.03.2007, 13:21
    #34377314
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Я бы сделал так,
есть программа Loader, который перед тем как запустить основную программу, проверяет наличие обновления, если есть обновление закачивает, затем запускает уже обновленную версию проги
Если же в самой программе такая функция заложена, типа "Проверить наличие обновление", то просто проверить обновление если есть, где-то отметить что нужно обновить и запустить Loader затем закрыть себя, Loader же в таком случае, после запуска смотрит процессы и пока не исчезнет из списка процесс основной проги, будет ждать, затем когда основная программа закроется начнет процесс обновления, после завершения обновления может просто выдать сообщение или запустить процесс, можно еще добавить возможность отката последнего обновления, сохранить копию основной программы до обновления и т.д.
...
Рейтинг: 0 / 0
07.03.2007, 14:16
    #34377529
Romka_84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
orunbekЯ бы сделал так,
есть программа Loader, который перед тем как запустить основную программу, проверяет наличие обновления, если есть обновление закачивает, затем запускает уже обновленную версию проги
Если же в самой программе такая функция заложена, типа "Проверить наличие обновление", то просто проверить обновление если есть, где-то отметить что нужно обновить и запустить Loader затем закрыть себя, Loader же в таком случае, после запуска смотрит процессы и пока не исчезнет из списка процесс основной проги, будет ждать, затем когда основная программа закроется начнет процесс обновления, после завершения обновления может просто выдать сообщение или запустить процесс, можно еще добавить возможность отката последнего обновления, сохранить копию основной программы до обновления и т.д.

Возможен и такой вариант. Но, дело в том, что получется уже несколько приложений. Пользователю сие не очень удобно - сначала запусти то, потом то...Запутаются. Уж поверь мне. А тут раз! на кнопку нажал и все готово - никаких проблем.

Я не уверен, но вроде бы есть какойто активХ для этого дела, но вот какой я не знаю.
...
Рейтинг: 0 / 0
07.03.2007, 22:19
    #34378610
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Romka_84Спасибо, идея понятна. Теперь вопрос в следующем: а как работающий екзешник переименует сам себя, т.е. как собственно в коде это выглядеть будет? Чет я таких и функций то не знаю.

Код: plaintext
Name OldName As NewName
...
Рейтинг: 0 / 0
07.03.2007, 22:27
    #34378619
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Romka_84Возможен и такой вариант. Но, дело в том, что получется уже несколько приложений. Пользователю сие не очень удобно - сначала запусти то, потом то...Запутаются. Уж поверь мне. А тут раз! на кнопку нажал и все готово - никаких проблем.

Нафиг вообще какие-то кнопки.

Пишется один загрузчик (в будущем он может использоваться для разных программ), который читает с сервера маленький файлик со сведениями (имя, версия, GUID, CRC32 и пр.) о всех файлах программы (exe, ocx, dll и др.). Сверяет их с имеющимися на компьютере, обновляет нужные и стартует указанный файл. В результате для юзера все абсолютно прозрачно - он просто запускает программу кликая иконку на столе.
...
Рейтинг: 0 / 0
07.03.2007, 23:20
    #34378671
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Да, загрузчик тоже должен уметь обновлять сам себя ;)
...
Рейтинг: 0 / 0
08.03.2007, 01:07
    #34378752
угу__
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Поищите в интернете пример что-то типа "ЕХЕ удаляет сам себя"...
...
Рейтинг: 0 / 0
08.03.2007, 15:20
    #34379062
Rubber
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Когда-то мне пришлось реализовать подобное.
Удаление собственного экзешника (или его переименование) у меня отрабатывало, равно как и на большинстве машин, на которых работала программа. Однако на некоторых (около 3%) - возникали проблемы, т.к. винды были на разных машинах разные - от 98 до XP.
Поскольку искать причины проблем времени не было, всё было реализовано таки образом:

При наличии новой версии - прога тянет так наз. uploader.exe, а потом уже новую версию 'себя'.
Новую версию 'себя' кладёт напр. с расширением me.new.
И запускает uploader.exe, а сама тут же прекращает свою работу.
uploader.exe делает временнУю поправку на завершение работы старого exe (тут возможны варианты от опроса процессов и ожидания завершения целевого, до примитивной задержки напр. на 1-2 сек.).
В свою очередь uploader.exe делает простую работу по удалению me.exe и переименованию me.new в me.exe и запускает me.exe а сам завершает работу.

Остаётся только добавить, что me.exe по завершению своей работы каждый раз смотрит наличие uploader.exe и убивает его (дабы не захламлять свою директорию)

Так ты получишь и обновление me.exe и в тоже время uploader.exe не будет статичным.

Естественно необходимо позаботится о проверке - твои ли это файлы (ведь ты передаёшь им управление) !!!
...
Рейтинг: 0 / 0
09.03.2007, 07:56
    #34379548
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Rubber
Про что я и говорю,
хорошая идея закачки и uploader'а, теперь буду делать так ;)


Romka_84
Возможен и такой вариант. Но, дело в том, что получется уже несколько приложений. Пользователю сие не очень удобно - сначала запусти то, потом то...Запутаются. Уж поверь мне. А тут раз! на кнопку нажал и все готово - никаких проблем.
Я не уверен, но вроде бы есть какойто активХ для этого дела, но вот какой я не знаю.


Почему же запусти это, запусти то... ВСЕГДА запускают одну программу, которая перед запуском проверяет наличие обновление, если есть, закачивает новую версию, обновляет (удаление старой версии, копирование новой версии), запускает основную прогу и все
...
Рейтинг: 0 / 0
12.03.2007, 09:35
    #34383363
timtim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заменить exe-файл?
Код: 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.
Option Explicit

Public Function UpdateApplication() As Boolean
Const UpdatePath As String = "\\192.168.0.1\Обмен\"
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
    savestring HKEY_CURRENT_USER, "SOFTWARE\CHTP", "Before_update",  1 
     
         'Типа хотел сделать чтобы показывался прогрессБар
         Update.Show
         While Update.Visible = True
         DoEvents
         Wend
        'Переименуем запущенный файл
        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

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


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