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

Вниз

Как заставить приложение закрыть себя и сразу открыть снова?   Найти похожие ветки 

 
Eugem ©   (2006-10-06 15:51) [0]

Как заставить приложение закрыть себя и сразу открыть снова? Прошу подсказать. Ничего не получается :-(


 
Сергей М. ©   (2006-10-06 15:52) [1]

Никак.


 
Ким   (2006-10-06 15:57) [2]

Примерно так же как умереть и сразу воскреснуть


 
clickmaker ©   (2006-10-06 16:02) [3]

только через другое приложение


 
Loginov Dmitry ©   (2006-10-06 16:04) [4]

Типа этого:

procedure TForm1.Button1Click();
begin
 Close;
 WinExec("Project1.exe", SW_SHOWNORMAL)
end;


 
Сергей М. ©   (2006-10-06 16:08) [5]


> Loginov Dmitry ©   (06.10.06 16:04) [4]


Твое "Типа этого" не соответствует условиям задачи.


 
Palladin ©   (2006-10-06 16:08) [6]

Вопрос только зачем? С утечкой памяти борьба? :)


 
from kz   (2006-10-06 17:06) [7]

Думаю то, что Eugem - это и имел введу.

> Close;
> WinExec("Project1.exe", SW_SHOWNORMAL)


 
Eugem ©   (2006-10-06 19:45) [8]


> Вопрос только зачем? С утечкой памяти борьба? :)

Нет, просто требуется перезапуск программы.


 
Zeqfreed ©   (2006-10-06 19:58) [9]

Добавляй айтем в системный шедулер.


 
имя   (2006-10-15 21:30) [10]

Удалено модератором


 
@!!ex ©   (2006-10-15 21:41) [11]


> Eugem ©   (06.10.06 15:51)  

Если строго по условию задачи, то сторонний агент.
Который ловит, что процесс завершился и запускает его заново.
Так делают на критичных серверах, чтобы если сервер вдруг по каким то причинам вывалился или завис, то это не приводило к краху всей системы, а он просто перезапускался.

Если же нужно просто перезапустить, то решение уже дано.
Только хочу немножко поправить тот конкретный код, что тут дан
, на более правильный, который будет работать с любым приложением.

procedure TForm1.RestartSystem;
begin
Close;
WinExec(PChar(ParamStr(0)), SW_SHOWNORMAL);
end;


 
Ketmar ©   (2006-10-15 21:43) [12]

>[11] @!!ex(c) 15-Oct-2006, 21:41
>, на более правильный, который будет работать с любым
>приложением.
вставили флоп. запустили. вынули флоп. работает?
%-)


 
@!!ex ©   (2006-10-15 21:50) [13]


> Ketmar ©   (15.10.06 21:43) [12]

Это не интересно, поскольку мы нарушаем целостность софта, а вэтом случае уже ничто работать не будет. :))


 
@!!ex ©   (2006-10-15 21:51) [14]

Кстати, тут тоже можно подумать.
Делать копию себя на винт и оттедова уже запускать в случае, если оригинал приложения не доступен....
Или еще как нить извратнуться....


 
Ketmar ©   (2006-10-15 21:52) [15]

можно. я просто указал на некорректное использование квантора всеобщности. %-)


 
C@N ©   (2006-10-16 01:26) [16]

нафиг!!! прогружайся в onformcreate... а как надо вызывай эту процедурину)))))


 
Barloggg   (2006-10-16 16:02) [17]

а может быть так?
запускаем вторую копию, потом удаляем себя.

procedure TForm1.RestartSystem;
begin
WinExec(PChar(ParamStr(0)), SW_SHOWNORMAL);
Close;
end;

если нет совместно открытых файлов сложностей не будет.


 
Ketmar ©   (2006-10-16 17:48) [18]

в принципе, можно и fork() реализовать, если уж такая пьянка пошла. %-)


 
Delpher ©   (2006-10-16 18:38) [19]

procedure TForm1.RestartSystem;
begin
Close;
WinExec(PChar(ParamStr(0)), SW_SHOWNORMAL);
end;


А разве всё что находится ЗА Close; выполняется=)?

И ещё: а что если в конец exe добавить запуск... Я с асм не знаю, но наверно можно что-то подобное организовать(вирусы же запускаются с конца=) ) Только там условие придется добавить...


 
Ketmar ©   (2006-10-16 18:41) [20]

>[19] Delpher(c) 16-Oct-2006, 18:38
>А разве всё что находится ЗА Close; выполняется=)?
ещё как.

>И ещё: а что если в конец exe добавить запуск... Я с асм
>не знаю, но наверно можно что-то подобное организовать(
>вирусы же запускаются с конца=) ) Только там условие
>придется добавить...
не надо бредить, ага? что такое "конец .exe"? где это?


 
Delpher ©   (2006-10-16 18:48) [21]

Ну я условно сказал=) в конец файла с программкой. Туда ещё вирусы записывют и они выполняются. Но здесь точно туева куча гемороя будет:)


 
Delpher ©   (2006-10-16 18:52) [22]

Вот ещё идея-помойму здесь такой не было.
Пишется дополнительная программка(pr2.exe), которая через секунду после запуска сделает WinExec("Project1.exe", SW_SHOWNORMAL) и закроется.
А в основной программе где надо перезапустить напишем:

WinExec("pr2.exe", SW_SHOWNORMAL)
close;

Так избежим конфликтов в доступе:)


 
@!!ex ©   (2006-10-16 18:56) [23]


> Delpher ©   (16.10.06 18:48) [21]


Не надо касаться вещей о которых мало знаете. ;)


> Delpher ©   (16.10.06 18:52) [22]

Вроде я про агента писал. Нет? :))


 
Delpher ©   (2006-10-16 19:05) [24]

Я это видел, просто подумал, что агент это вечно-работающий процесс. в принципе у вас так и есть-как он поймает закрытие будучи не запущенным?


 
@!!ex ©   (2006-10-16 19:33) [25]


> Delpher ©   (16.10.06 19:05) [24]

Фича агента в том, что ты не запускаеш основную программу вообще.
Ты запускаеш агента, а он уже смотрит, если программа не запущена, значит нужно ее запустить.

А что будет в вашем случае, если в момент:
> WinExec("pr2.exe", SW_SHOWNORMAL)

программа выполнится и зависинит. Например у нее дофига ресурсов в памяти и она их выгружает, и будет выгружаться более чем 1 секунду?
Аксес виолейшн.


 
@!!ex ©   (2006-10-16 19:34) [26]

Тьфу. Долбанный Ctrl+Enter....
Я не дописал.
Аксес Виолейшн не будет, но потенциально может быть.
В случае же с агентом - эта возможность исключается.


 
Delpher ©   (2006-10-16 20:49) [27]

Просто автор топика  не намерен следить за "независанием" программы=) А лишний процесс в памяти не очень то нужен....
В этой программке можно забахать не одну секунду, а проверяя доступность пытаться запустить-не доступен-подождем секундочку и попробуем ещё раз, опять не доступен повторим и т.д. доступен-вырубаем цикл и запускаем программку снова(вместо доступности можно проверять наличие процесса ПРОГРАММЫ в памяти). Кстати название процесса основной программы(или хэндл) и путь к ней можно передавать с параметрами=> универсальный загрузчик=)


 
ККВ   (2006-10-17 13:14) [28]

procedure AppRestart;
begin
 AppExec(ParamStr(0), "", SW_SHOW);
 TerminateProcess(GetCurrentProcess, 0);
end;


 
ККВ   (2006-10-17 13:19) [29]

function AppExec(const CmdLine, CmdParams: String; const CmdShow: Integer): Boolean;
begin
  result:= (ShellExecute(GetCurrentProcess,
                        "open",
                        PChar(CmdLine),
                        PChar(CmdParams),
                        "",
                        CmdShow)>32);
end;


 
Sam Stone ©   (2006-10-17 14:25) [30]


> программа выполнится и зависинит. Например у нее дофига
> ресурсов в памяти и она их выгружает, и будет выгружаться
> более чем 1 секунду?

создаем мьютекс/что-то еще, запускаем paramstr(0), закрываемся.
В OnClose высвобождаем ресурсы, отъеденные под что-то (массивы, списки etc), убиваем мьютекс/что-то еще.
В OnCreate чекаем наличие мьютекса/чего-то еще и не грузимся дальше, пока он не исчезнет, либо просто смотрим список процессов и пока в нем есть 2 ParamStr(0) - не даем дальше грузиться второй копии


 
@!!ex ©   (2006-10-17 16:36) [31]


> ККВ   (17.10.06 13:14) [28]

Было уже. Не оригианально.


> Sam Stone ©   (17.10.06 14:25) [30]

Какие преимущества перед агентом? :))


 
Sam Stone ©   (2006-10-17 17:11) [32]


> @!!ex ©   (17.10.06 16:36) [31]

не надо лишнюю софтину писать и дебажить :)


 
naxellar   (2006-10-19 02:41) [33]

Надо батник написать, то бишь файл с расширением .bat.
Прога формирует батник, запускает его, а сама закрывается.
А тот в свою очередь запускает прогу, если надо, мона и задержку в нем прописать.


 
Palladin ©   (2006-10-19 08:07) [34]


> мона и задержку в нем прописать.

на 5 лет, что бы точно быть уверенным



Страницы: 1 вся ветка

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

Наверх




Память: 0.55 MB
Время: 0.063 c
2-1163244317
ant23
2006-11-11 14:25
2006.12.03
Как выделить весь текст в мемо


15-1163389624
Slider007
2006-11-13 06:47
2006.12.03
С днем рождения ! 12 ноября


1-1161243455
pyJIoH
2006-10-19 11:37
2006.12.03
Выгрузка данных в XML. Создание файла TFileStream ом.


1-1161332146
zorik
2006-10-20 12:15
2006.12.03
Что за файл GqeDelph?


15-1163760087
Ш-К
2006-11-17 13:41
2006.12.03
Кто-нибудь юэает ModelMaker Code Explorer 4.20?