Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перезапуск программы 
:(
    Опции темы
Михалыч
Дата 23.6.2009, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 472
Регистрация: 1.7.2008

Репутация: нет
Всего: нет



В программе после изменений нужно  перезпустить программу (сначало закрыть,и снова запустить).
Делаю так:
Код

var
   FullProgPath: PChar;
 begin
   FullProgPath := PChar(Application.ExeName);
  WinExec(FullProgPath, SW_SHOW); 
  Application.Terminate;

 Но у меня программа защищена от запуска второй копии,и он блокирует перезапуск выдавая сообщение о том что программа уже работает,подскажите что можно сделать


--------------------
За частый поиск был забанен во всех известных поисковых системах.
Обиженных  комодераторов: 1 
PM MAIL   Вверх
uwannadie
Дата 23.6.2009, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 5.6.2009
Где: Крым, Керчь

Репутация: нет
Всего: 1



есть такой вариант:
1 программно создаешь батник. запускаешь
2 через батник закрываешь свою прогу, использую taskkill
   потом опять открываешь через батник
3 при запуске проги проверяешь наличиек батника и удалешь если есть (Deletefile(...))

пример:

файл run.bat:
Код

@echo off
taskkill /F /IM имя_программы
::задержка в 5 секунд чтобы прога выгрузилась
ping 127.0.0.1 -n 5 > nul 
путь_и_имя программы

а в самой программе на событие TYourForm.OnCreate написать

Код

deletefile(extractfilepath(application.exename)+'\run.bat');


Это сообщение отредактировал(а) uwannadie - 23.6.2009, 21:55
--------------------
PM MAIL   Вверх
kami
Дата 23.6.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Я так понимаю, что отслеживание второй копии производится при помощи мьютекса? (самое распространенное решение).

Тогда так:

Код

procedure DoRestartProg;
begin
  ShellExecute(0, 'open', PChar(ParamStr(0)), 'RESTART'), nil, SW_SHOW);
  Application.Terminate; 
end;


В .dpr:

Код

function IsRestarted:boolean;
var
  i:integer;
begin
  Result:=False;
  for i:=1 to ParamCount do  // просматриваем все параметры командной строки
    if ParamStr(i)='RESTART' then
      begin
        Result:=True; // нашли параметр перезапуска
        break;
      end;
end;

begin
  if not IsRestarted then
    begin
      // сюда попадаем, если мы запускаемся без параметра RESTART
      // здесь - проверка наличия мьютекса и если он есть - выход.
      // иначе - создаем мьютекс.
    end
  else
    begin
      // здесь - просто открываем мьютекс, чтобы когда исходное приложение завершится по Application.Terminate
      // мы не потеряли его.
    end;
// дальше - стандартный код Delphi
  Application.initialize;
  Application.CreateForm
// и т.д.


Это сообщение отредактировал(а) kami - 23.6.2009, 21:36
PM MAIL WWW   Вверх
CodeMonkey
Дата 24.6.2009, 12:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Ну так чего бы вам не закрыть мьютекс (или кто там у вас) ДО того, как вы вызываете свою вторую копию, а не после?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0526 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.