Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2010, 13:13   #1
skalt12
Пользователь
 
Регистрация: 05.07.2009
Сообщений: 87
По умолчанию перезагрузка приложения

Приветствую всех! у меня вопрос, каким макаром можно перезагрузить работающее приложение?
Я делаю так, создаю еще одно маленькое приложение
в нем убиваю процесс:
Код:

uses Tlhelp32;
...
function KillIt(ExeFileName:string):integer;
const  PROCESS_TERMINATE=$0001;
var  Co:  BOOL;
      FS:  THandle;
      FP:  TProcessEntry32;
begin
  result  :=  0;
  FS  :=  CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FP.dwSize  :=  Sizeof(FP);
  Co  :=  Process32First(FS, FP);
  while integer(Co) <> 0 do
    begin
      if ((UpperCase(ExtractFileName(FP. szExeFile)) = UpperCase            (ExeFileName)) or
     (UpperCase(FP.szExeFile) = UpperCase(ExeFileName))) then
        Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
    FP.th32ProcessID),0));
    Co := Process32Next(FS, FP);
end;
  CloseHandle(FS);
end;
и открываю мое перезапускаемое приложение по новой:
Код:
WinExec(ExtractFilePath(paramstr(0)) + 'prog_Name.exe')
Расположено мини-приложение в корне основной программы.. То есть, в основном приложении жму "перезагрузить", открывается мини-приложение, завершает процесс, открывает снова утилиту и завершается само..

А как-нибудь попроще можно все это реализовать?
skalt12 вне форума Ответить с цитированием
Старый 29.07.2010, 13:23   #2
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Цитата:
Приветствую всех! у меня вопрос, каким макаром можно перезагрузить работающее приложение?
Перегрузить самого себя.
VintProg вне форума Ответить с цитированием
Старый 29.07.2010, 13:27   #3
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Думаю копать надо в сторону exec. Так называемый "суицидальный запуск". В Си exec заменяет текущий поток другим приложением. Насчет Delphi не кажу (не знаю) но думаю нечто похожее должно быть...
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 29.07.2010, 14:31   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от skalt12 Посмотреть сообщение
Приветствую всех! у меня вопрос, каким макаром можно перезагрузить работающее приложение?
Я делаю так, создаю еще одно маленькое приложение
в нем убиваю процесс:
Код:

uses Tlhelp32;
...
function KillIt(ExeFileName:string):integer;
const  PROCESS_TERMINATE=$0001;
var  Co:  BOOL;
      FS:  THandle;
      FP:  TProcessEntry32;
begin
  result  :=  0;
  FS  :=  CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FP.dwSize  :=  Sizeof(FP);
  Co  :=  Process32First(FS, FP);
  while integer(Co) <> 0 do
    begin
      if ((UpperCase(ExtractFileName(FP. szExeFile)) = UpperCase            (ExeFileName)) or
     (UpperCase(FP.szExeFile) = UpperCase(ExeFileName))) then
        Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
    FP.th32ProcessID),0));
    Co := Process32Next(FS, FP);
end;
  CloseHandle(FS);
end;
и открываю мое перезапускаемое приложение по новой:
Код:
WinExec(ExtractFilePath(paramstr(0)) + 'prog_Name.exe')
Расположено мини-приложение в корне основной программы.. То есть, в основном приложении жму "перезагрузить", открывается мини-приложение, завершает процесс, открывает снова утилиту и завершается само..

А как-нибудь попроще можно все это реализовать?
А вот такой идеии не возникало?
1. Сохранение (если есть что) данные, настройки вывод приложения в конце концов
2. Запуск копии (имеется ввиду ShellExecute или CreateProcess самого себя)
3. Спокойное завершения себя (но уже известно что перед выполнением 2го пункта вы освободили все занимаемые и потенциально в будущем занимаемые ресурсы другой копией вашего приложения)

Все элементарно.
BOBAH13 вне форума Ответить с цитированием
Старый 29.07.2010, 16:09   #5
skalt12
Пользователь
 
Регистрация: 05.07.2009
Сообщений: 87
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
А вот такой идеии не возникало?
1. Сохранение (если есть что) данные, настройки вывод приложения в конце концов
2. Запуск копии (имеется ввиду ShellExecute или CreateProcess самого себя)
3. Спокойное завершения себя (но уже известно что перед выполнением 2го пункта вы освободили все занимаемые и потенциально в будущем занимаемые ресурсы другой копией вашего приложения)

Все элементарно.
да что-то обошла меня стороной такая идея =)

действительно, всё оказалось куда проще

Код:
  ShellExecute (mainWin.Handle, nil, PChar (Application.ExeName), nil, nil, SW_RESTORE);
  Application.Terminate;
вот так получилось

Последний раз редактировалось Stilet; 29.07.2010 в 17:12.
skalt12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перезагрузка интернета Nice42ru Помощь студентам 3 05.01.2010 22:49
перезагрузка компа lexab18 Операционные системы общие вопросы 8 07.09.2009 08:19
Перезагрузка компьютера antoha.by Паскаль, Turbo Pascal, PascalABC.NET 13 04.08.2008 09:39
Перезагрузка Windows agatos Свободное общение 7 21.01.2008 17:45
Перезагрузка LAFam Win Api 13 09.12.2007 09:15