задачка следующая:
нужно после запуска первого например exe он находится например c:\e.exe(директория может меняться)
скопировать на место !!!себя!!! другой экзе, т.е. предварительно себя удалить, и запуститься,
реально такое сделать?
Hello adontz, you wrote:
>> реально такое сделать? > писать в файл загруженного исполняемого модуля нельзя.
Можно.
Есть пример самомодифицирущейся проги. Но там хакерские методы, недокументированые фичи. Пример не работает под XP, т.к. там кое-что поменялось.
Hello adontz, you wrote:
>> реально такое сделать? > писать в файл загруженного исполняемого модуля нельзя.
Можно.
Есть пример самомодифицирущейся проги. Но там хакерские методы, недокументированые фичи. Пример не работает под XP, т.к. там кое-что поменялось.
Здравствуйте, Slava Antonov, Вы писали:
SA>Есть пример самомодифицирущейся проги. Но там хакерские методы, недокументированые фичи. Пример не работает под XP, т.к. там кое-что поменялось.
Нет, ну это не серьёзно. От каких хаков головной боли больше чем пользы.
Здравствуйте, Nixa, Вы писали:
N>задачка следующая: N>нужно после запуска первого например exe он находится например c:\e.exe(директория может меняться) N>скопировать на место !!!себя!!! другой экзе, т.е. предварительно себя удалить, и запуститься, N>реально такое сделать?
N>Спасибо
Можно сделать это через дополнительную программу. Входные параметры (через командную строку): имя входного файла, имя выходного, таймаут. После запуска она начнет пытаться удалить выходной файл и записать на его место входной. Пока не истечет таймаут. Если перезапись в течение отведенного периода выполнить не удалось — сообщение об ошибке. Если удалось — запускаем его.
В основной программе — скачиваем обновление во входной файл и запускаем перезапускалку.
А вообще это уже много раз обсуждалось...
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
It's kind of fun to do the impossible (Walt Disney)
Hello adontz, you wrote:
>> Есть пример самомодифицирущейся проги. Но там хакерские методы, недокументированые фичи. Пример не работает под XP, т.к. там кое-что поменялось. > Нет, ну это не серьёзно.
Серьезно это или нет — другой вопрос. Но факт налицо — модифицировать загруженный exe-модуль — можно.
Здравствуйте, Nixa, Вы писали:
N>задачка следующая: N>нужно после запуска первого например exe он находится например c:\e.exe(директория может меняться) N>скопировать на место !!!себя!!! другой экзе, т.е. предварительно себя удалить, и запуститься, N>реально такое сделать?
1) Проверяем наличие файлов с расширением .old. Если есть — удаляем.
2) Переименовываем свой экзешник в .old (он сам себя может переименовать).
3) Пишем под старым именем новый экзешник (т.е. получаем экзешник уже новой версии).
4) Запускаем новый экзешник, выходим.
Т.е что-то вроде:
// проверим существование обновленийif FileExists('\\Server\Updates\myprog.exe') and FilesNotEqual('\\Server\Updates\myprog.exe','myprog.exe') then
begin// удалим старые версии if FileExists('myprog.old') then DeleteFile('myprog.old');
// переименуемся
RenameFile('myprog.exe','myprog.old');
// скопируем обновления
CopyFile('\\Server\Updates\myprog.exe','myprog.exe');
// запустим новую версию
RunFile('myprog.exe');
// закроем сами себя (старую версию)
ExitFromProgram;
end;
Будет работать только на NT/2000/XP. И никаких хакерских методов
Здравствуйте, Nixa, Вы писали:
N>задачка следующая: N>нужно после запуска первого например exe он находится например c:\e.exe(директория может меняться) N>скопировать на место !!!себя!!! другой экзе, т.е. предварительно себя удалить, и запуститься, N>реально такое сделать?
Посмотрите в сторону самоудаляющихся программ..
Т.е. просто после запуска прога грохает свой файл и копирует на его место новый.