Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.042 c
2-1163617262
Troan_81
2006-11-15 22:01
2006.12.03
handle


2-1163798289
АртемКИН
2006-11-18 00:18
2006.12.03
Создание программы - с базой


2-1163174786
yuraspb
2006-11-10 19:06
2006.12.03
Как записать в файл массив размером 8 точек на миллион


2-1163620421
Magister Crazy
2006-11-15 22:53
2006.12.03
Проблемы со StringGrid


15-1163494474
officer
2006-11-14 11:54
2006.12.03
Help





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский