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

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

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

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

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

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

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

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

Пишется один загрузчик (в будущем он может использоваться для разных программ), который читает с сервера маленький файлик со сведениями (имя, версия, GUID, CRC32 и пр.) о всех файлах программы (exe, ocx, dll и др.). Сверяет их с имеющимися на компьютере, обновляет нужные и стартует указанный файл. В результате для юзера все абсолютно прозрачно - он просто запускает программу кликая иконку на столе.
...
Рейтинг: 0 / 0
Как заменить exe-файл?
    #34378671
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, загрузчик тоже должен уметь обновлять сам себя ;)
...
Рейтинг: 0 / 0
Как заменить exe-файл?
    #34378752
угу__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поищите в интернете пример что-то типа "ЕХЕ удаляет сам себя"...
...
Рейтинг: 0 / 0
Как заменить exe-файл?
    #34379062
Rubber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда-то мне пришлось реализовать подобное.
Удаление собственного экзешника (или его переименование) у меня отрабатывало, равно как и на большинстве машин, на которых работала программа. Однако на некоторых (около 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
Как заменить exe-файл?
    #34379548
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rubber
Про что я и говорю,
хорошая идея закачки и uploader'а, теперь буду делать так ;)


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


Почему же запусти это, запусти то... ВСЕГДА запускают одну программу, которая перед запуском проверяет наличие обновление, если есть, закачивает новую версию, обновляет (удаление старой версии, копирование новой версии), запускает основную прогу и все
...
Рейтинг: 0 / 0
Как заменить exe-файл?
    #34383363
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как заменить exe-файл?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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