Перейти к содержанию
Fire Monkey от А до Я
  • 0

Перезапуск приложения под Windows


Валерий М.

Вопрос

Форумчане, всем доброго дня, хотел узнать можно ли в FMX как-нибудь сделать перезапуск приложения при нажатии на кнопку? Если можно то как это реализовать, подкиньте информации почитать или идею, Delphi 10 upd 1. В моём понимании перезапустить - это убить старую и открыть новую.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Вот так

uses Winapi.ShellAPI, Winapi.Windows;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  FullProgPath: String;
begin
  FullProgPath:='C:\Temp\1.exe'; // полный путь к exe
  ShellExecute(0, PChar('open'), PChar(FullProgPath), PChar(''), PChar(ExtractFilePath(FullProgPath)),
    SW_SHOWNORMAL);
  Application.Terminate;
end;
Изменено пользователем Rusland
Ссылка на комментарий
  • 0

Вот так

uses Winapi.ShellAPI, Winapi.Windows;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  FullProgPath: String;
begin
  FullProgPath:='C:\Temp\1.exe'; // полный путь к exe
  ShellExecute(0, PChar('open'), PChar(FullProgPath), PChar(''), PChar(ExtractFilePath(FullProgPath)),
    SW_SHOWNORMAL);
  Application.Terminate;
end;

Насколько я понимаю, это не сработает, если запрещен запуск второй версии приложения и/или настроен монопольный доступ к бд (то есть только 1 коннект).

Ссылка на комментарий
  • 0

 

Вот так

uses Winapi.ShellAPI, Winapi.Windows;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  FullProgPath: String;
begin
  FullProgPath:='C:\Temp\1.exe'; // полный путь к exe
  ShellExecute(0, PChar('open'), PChar(FullProgPath), PChar(''), PChar(ExtractFilePath(FullProgPath)),
    SW_SHOWNORMAL);
  Application.Terminate;
end;

Насколько я понимаю, это не сработает, если запрещен запуск второй версии приложения и/или настроен монопольный доступ к бд (то есть только 1 коннект).

 

 

В этом случае придется писать службу которая будет отвечать за перезапуск приложения или писать скрипты (или *.bat)...

Ссылка на комментарий
  • 0

 

Вот так

uses Winapi.ShellAPI, Winapi.Windows;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  FullProgPath: String;
begin
  FullProgPath:='C:\Temp\1.exe'; // полный путь к exe
  ShellExecute(0, PChar('open'), PChar(FullProgPath), PChar(''), PChar(ExtractFilePath(FullProgPath)),
    SW_SHOWNORMAL);
  Application.Terminate;
end;

Насколько я понимаю, это не сработает, если запрещен запуск второй версии приложения и/или настроен монопольный доступ к бд (то есть только 1 коннект).

 

что то я не понял, а причем тут монопольный доступ к бд?

Ссылка на комментарий
  • 0

Вот так

uses Winapi.ShellAPI, Winapi.Windows;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  FullProgPath: String;
begin
  FullProgPath:='C:\Temp\1.exe'; // полный путь к exe
  ShellExecute(0, PChar('open'), PChar(FullProgPath), PChar(''), PChar(ExtractFilePath(FullProgPath)),
    SW_SHOWNORMAL);
  Application.Terminate;
end;

Насколько я понимаю, это не сработает, если запрещен запуск второй версии приложения и/или настроен монопольный доступ к бд (то есть только 1 коннект).

что то я не понял, а причем тут монопольный доступ к бд?
Да очень просто, как вы запустите вторую копию программы, которая уже имеет коннект к бд при настройке этой бд в монопольном режиме? Ведь код сначала запускает копию программы, а потом только закрывает)
Ссылка на комментарий
  • 0

Вот так

uses Winapi.ShellAPI, Winapi.Windows;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  FullProgPath: String;
begin
  FullProgPath:='C:\Temp\1.exe'; // полный путь к exe
  ShellExecute(0, PChar('open'), PChar(FullProgPath), PChar(''), PChar(ExtractFilePath(FullProgPath)),
    SW_SHOWNORMAL);
  Application.Terminate;
end;

Насколько я понимаю, это не сработает, если запрещен запуск второй версии приложения и/или настроен монопольный доступ к бд (то есть только 1 коннект).

 

В этом случае придется писать службу которая будет отвечать за перезапуск приложения или писать скрипты (или *.bat)...

Есть более простой способ (использую более 10 лет)): держать еще один exe файл в этой же директории, которому передают управление, а он в свою очередь заново запускает основное приложение. При этом, второй файл еще может выполнять дополнительные функции (обновление бд и тд)...
Ссылка на комментарий
  • 0

 

 

 

Вот так

uses Winapi.ShellAPI, Winapi.Windows;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  FullProgPath: String;
begin
  FullProgPath:='C:\Temp\1.exe'; // полный путь к exe
  ShellExecute(0, PChar('open'), PChar(FullProgPath), PChar(''), PChar(ExtractFilePath(FullProgPath)),
    SW_SHOWNORMAL);
  Application.Terminate;
end;

Насколько я понимаю, это не сработает, если запрещен запуск второй версии приложения и/или настроен монопольный доступ к бд (то есть только 1 коннект).

что то я не понял, а причем тут монопольный доступ к бд?
Да очень просто, как вы запустите вторую копию программы, которая уже имеет коннект к бд при настройке этой бд в монопольном режиме? Ведь код сначала запускает копию программы, а потом только закрывает)

 

ну дык сначала проверка при запуске на перезапуск, а потом на возможность подключиться монопольно!

я как то так представлял!

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...