Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: CL | DM;

Вниз

Нужно перезаписать 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 вся ветка

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.034 c
14-1109144291
olookin
2005-02-23 10:38
2005.03.13
Возможно ли...


4-1106907887
MiF
2005-01-28 13:24
2005.03.13
Помогите получить список групп из Active Directory


1-1109323510
Dysan
2005-02-25 12:25
2005.03.13
большие числа


4-1105224836
Arnold
2005-01-09 01:53
2005.03.13
Проблема с ComboBox на WinApi


4-1107258139
AlexG
2005-02-01 14:42
2005.03.13
Нужно перезаписать EXE-файл запущенной программы