Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1108858295
АНТИспаммер
2005-02-20 03:11
2005.03.13
Как отличить спам от не спама ?


1-1109006380
Alek
2005-02-21 20:19
2005.03.13
Фреймы из длл


14-1109064955
DiamondShark
2005-02-22 12:35
2005.03.13
Тут как-то приводили детские книжки...


4-1107031601
Unknown
2005-01-29 23:46
2005.03.13
Dll Functions


14-1108990234
Calm
2005-02-21 15:50
2005.03.13
Использует ли кто-нибудь вас UML ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский