Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
ВнизНужно перезаписать EXE-файл запущенной программы Найти похожие ветки
← →
AlexG © (2005-02-01 14:42) [0]Т.е. программа запущена и хочет сама перезаписать свой EXE из другого места. Как мне это сделать?
← →
Digitman © (2005-02-01 14:47) [1]
> из другого места
из какого такого "другого" ? из причинного что ль ?
← →
Jay1982 © (2005-02-01 14:49) [2]Находишь процесс, определяешь его екзешник, прибиваешь процесс, перезаписываешь программу, снова запускаешь екзешник
← →
kaZaNoVa © (2005-02-01 14:53) [3]я делал с потоками NTFS но нужно, чтобы у юзера была эта файловая система ...
идеально - с временным ЕХЕ .. - см [2]
← →
AlexG © (2005-02-01 15:29) [4]Так, ситуация такая: сама программа должна перезаписать свой exe файл, а потом перезапуститься.
Ваши предложения не подходят.
← →
Jay1982 © (2005-02-01 15:34) [5]Даже так, программу обновления пишешь?
← →
Jay1982 © (2005-02-01 15:34) [6]Даже так, программу обновления пишешь?
← →
Gloomer © (2005-02-01 15:36) [7]>AlexG © (01.02.05 15:29) [4]
Никогда не замечал, что при установке и удалении программ Windows просит перегрузить компьютер? При этом в реестре в ветке RunOnce добавляется команда перезаписи или удаления запущенного в настойщий момент файла. В любом случае, чтобы заменить свой запущенный ехе-шник потребуется еще один ехе-шник.
← →
AlexG © (2005-02-01 15:39) [8]//Gloomer © (01.02.05 15:36) [7]
Примерно такого ответа я и ожидал. Жаль, что нет иных способов. Ну ладно. Буду писать дальше. Спасибо.
PS: Да, я пишу программу обновления. С FTP.
← →
Digitman © (2005-02-01 15:40) [9]
> AlexG © (01.02.05 15:29) [4]
блажь. чистой воды.
← →
Jay1982 © (2005-02-01 15:40) [10]Я в своем приложении при обновлении, запускаю другую прогу, которая всё делает, а потом назад запускает текущую, можно с параметром передавать имя/путь к екзешнику
← →
Gloomer © (2005-02-01 15:40) [11]Мораль:
Из своего ехе-шника запускаешь еще один свой ехе-шник и закрываешься. Второй ехе-шник ждет, пока закроется первый, перезаписывает его и запускает, затем тоже закрывается.
← →
Алхимик © (2005-02-01 15:41) [12]
> [7] Gloomer © (01.02.05 15:36)
Я думаю, что через второй exe - это джедайский подход. Через реестр сабж, только ленивые падаваны реализуют. :)
← →
Jay1982 © (2005-02-01 15:47) [13]Алхимик © (01.02.05 15:41) [12]
:)
← →
kaZaNoVa © (2005-02-01 16:38) [14]через NTFS http://sys.h14.ru/ntfs.html
← →
AlexG © (2005-02-01 16:46) [15]//Digitman © (01.02.05 15:40) [9]
> AlexG © (01.02.05 15:29) [4]
блажь. чистой воды.
Это неуважение к теме ветки?
Кстати, как можно определить запущенно ли другое приложение? Т.е. тем самым вторым ехешником определить запущено ли наше злополучное приложение, которое мы хотим обновить?
← →
Jay1982 © (2005-02-01 16:52) [16]
uses SyncObjs;
var
CheckEvent: TEvent;
CheckEvent:= TEvent.Create( nil, false, true, "MYPROGRAM_CHECKEXIST" );
If CheckEvent.WaitFor( 10 ) <> wrSignaled then
begin
//Already running...
end
← →
Erik1 © (2005-02-01 16:59) [17]Тагда уж так:
ProcessID := StrToInt64(ParamStr(1));
ProcessHandle := OpenProcess(SYNCHRONIZE, False, ProcessID);
//PROCESS_ALL_ACCESS
LastErr := GetLastError;
PNormal := LastErr = 0;
if not PNormal then
Report("Error opening process. Code:" + IntToStr(LastErr) + " " +
SysErrorMessage(LastErr));
//Process allready terninated! 87
if PNormal then
begin
LastErr := WaitForSingleObject(ProcessHandle, INFINITE); // Ждем
GetExitCodeProcess(ProcessHandle, ExitCode);
if LastErr = $FFFFFFFF then
Writeln(OutID, "Error waiting parent process. Code:" +
IntToStr(GetLastError));
Далее понятно. И конечно надо передать в сомандной строке ID процесса родителя.
← →
Digitman © (2005-02-01 17:06) [18]
> AlexG © (01.02.05 16:46) [15]
> Это неуважение к теме ветки?
это всего лишь утверждение, что затея твоя достойна определения "блажь"
ибо ты даже не удосужился пояснить , на кой ляд тебе понадобилась логика "самомодификации"
← →
DeadMeat © (2005-02-01 20:07) [19]Способ извращенца - внедрить либо себя, либо DLL-ку в первый попавшийся процесс и оттуда уже работать... Первым попавшимся уже ИМХО какбы принято считать Explorer.exe
---
...Death Is Only The Begining...
← →
kaZaNoVa © (2005-02-01 20:14) [20]DeadMeat © (01.02.05 20:07) [19]
я так пробовал))
← →
DeadMeat © (2005-02-01 21:20) [21]
> я так пробовал))
Хехе... Не сомневаюсь. И библиотека наверняка была самовыгружающася... Да?...
;))
---
...Death Is Only The Begining...
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.044 c