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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2019, 13:34   #1
JaS0n
Новичок
Джуниор
 
Регистрация: 31.08.2018
Сообщений: 2
По умолчанию Запрет запуска второй копии программы

Доброго времени суток уважаемые форумчане!

Появилась задача, модифицировать существующее приложение.
Есть приложение работающее с базами данных, параметры подключения задаются через ini файл. Руководство желает отойти от файлов конфигов. Но при этом в окошке логина нужно выбирать БД к которой подключаться и запретить запуск второй копии приложения с такой же выбранной базой данных.

Подскажите решение или пните в сторону в которую копать. Ограничить запуск второй копии при инициализации приложения не подходит.

Всем заранее огромное человеческое спасибо!
JaS0n вне форума Ответить с цитированием
Старый 24.07.2019, 14:02   #2
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

при запуске новой копии найти главные окна всех ранее запущеных копий.. Если окна найдены, то при логине в новой спросить у них, к каким базам они подключены. Если имя одной из них совпадает с тем, что введено при логинн в новой копии - выдать ошибку. Всё просто.

Последний раз редактировалось BLACK_RAIN; 24.07.2019 в 14:13.
BLACK_RAIN вне форума Ответить с цитированием
Старый 24.07.2019, 14:10   #3
JaS0n
Новичок
Джуниор
 
Регистрация: 31.08.2018
Сообщений: 2
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
при логине во второй копии, нужно искать окно первой. Если окно найдено, спросить у него, к какой базе оно подключено. Если имена совпадают - выдать ошибку во второй копии. Всё просто.
Общий принцип мне понятен, а вот как это реализовать? Пока что всё что я нашел в Гугле не помогает.
Спасибо за ответ!
JaS0n вне форума Ответить с цитированием
Старый 24.07.2019, 14:19   #4
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от JaS0n Посмотреть сообщение
Общий принцип мне понятен, а вот как это реализовать? Пока что всё что я нашел в Гугле не помогает.
Спасибо за ответ!
есть какое-то системное сообщение, которое позволяет окнам разных процессов обмениваться текстом. А какое - не помню.
загуглите "delphi передать текст другому окну", или типа того.
BLACK_RAIN вне форума Ответить с цитированием
Старый 25.07.2019, 21:18   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Цитата:
uuuuuuuuuuuuuu.dpr

program uuuuuuuuuuuuuu;

uses
Windows,
Forms;

{$R *.res}

const
srMutexName = 'ваш идентификатор. можете после запуска программы динамически создавать когда хотите свой идентификатор и проверять его существование, и в других модулях, не обязательно в *.dpr';

var
f_m :THandle;

begin
f_m := CreateMutex(nil, True, srMutexName);
if ((ERROR_ALREADY_EXISTS = GetLastError()) or
(ERROR_ACCESS_DENIED = GetLastError())) then
begin
if (0 <> f_m) then CloseHandle(f_m);
ShowMessage('Другая копия уже запущена');
end
else
try
Application.Initialize;
Application.ShowMainForm := True;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
finally
CloseHandle(f_m);
end;
end.
Еще есть Memory Mapped Files
Alter вне форума Ответить с цитированием
Старый 26.07.2019, 02:10   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от JaS0n Посмотреть сообщение
в окошке логина нужно выбирать БД к которой подключаться и запретить запуск второй копии приложения с такой же выбранной базой данных.
Лично я бы подумал о написании программы-оболочки, которая сама защищена от повторного запуска хоть мьютекcом как в примере Alter, хоть любым другим способом, коих в И-нете полно. А уж она при повторном запуске проверяла бы запущена ли основная программа с конкретной базой. Список баз можно хранить в обычных TList/TStringList/TCheckListBox etc.

Последний раз редактировалось northener; 26.07.2019 в 02:22.
northener вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО] Запрет запуска второй копии программы Ash Общие вопросы Delphi 9 17.04.2017 10:56
Запрет запуска второй копии программы unbanned Общие вопросы Delphi 0 26.09.2013 19:55
как разрешить запуск второй копии чужого приложения s1s1s1 Общие вопросы Delphi 4 02.11.2011 01:47
Запрет запуска программы на VBA в случае если Excel уже открыт kovalevskivf Microsoft Office Excel 4 01.09.2009 11:22