Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.09.2010, 15:59
perkalaba perkalaba вне форума
Прохожий
 
Регистрация: 06.09.2010
Сообщения: 3
Репутация: 10
По умолчанию защита приложения от повторного запуска по сети

Есть два компютера, соединенных сетью. На одном из них установлено приложение, которое можно запускать на обоих машинах. Единственное условие - чтоб одновременно не можно было его запустить на обеих компютерах.
Код:
if GetLastError = ERROR_ALREADY_EXISTS then
   begin
    MyWindow := FindWindowEx(0, 0, 'TForm1', nil);
    if MyWindow=0 then SetForegroundWindow(MyWindow);
    MessageDlg('Програма вже запущена', mtError,[mbOk],0);
    Halt;
   end;
Admin: Не забываем пользоваться тегами!

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

Последний раз редактировалось Admin, 06.09.2010 в 16:08.
Ответить с цитированием
  #2  
Старый 06.09.2010, 16:10
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

CreateNamedPipe/ConnectNamedPipe
Ответить с цитированием
  #3  
Старый 06.09.2010, 16:37
perkalaba perkalaba вне форума
Прохожий
 
Регистрация: 06.09.2010
Сообщения: 3
Репутация: 10
По умолчанию

спасибо... а нет под рукой примера, чтоб я не гуглил?
Ответить с цитированием
  #4  
Старый 06.09.2010, 17:09
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Цитата:
Сообщение от perkalaba
спасибо... а нет под рукой примера, чтоб я не гуглил?
А почему бы тебе не погуглить?
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
  #5  
Старый 06.09.2010, 18:30
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

очень грубо
сервер:
Код:
  hPipe:=CreateNamedPipe(
    PChar('\\.\pipe\mynamedpipe'),
    PIPE_ACCESS_DUPLEX,
    PIPE_TYPE_BYTE or PIPE_READMODE_BYTE or PIPE_WAIT,
    PIPE_UNLIMITED_INSTANCES,
    512,
    512,
    0,
    nil
  );
  if hPipe=INVALID_HANDLE_VALUE then raise Exception.Create(SysErrorMessage(GetLastError));
клиент:
Код:
  hFile:=CreateFile(
    PChar('\\localhost\pipe\mynamedpipe'),
    GENERIC_READ or GENERIC_WRITE,
    0,
    nil,
    OPEN_EXISTING,
    0,
    0
  );
  if hFile=INVALID_HANDLE_VALUE then raise Exception.Create(SysErrorMessage(GetLastError));
Ответить с цитированием
  #6  
Старый 06.09.2010, 18:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Приложение открывает некоторые tcp порт и слушает его. это внормальном режиме. при старте приложение сначала пытается присоединиться к другому приложению по нашему порту. если присоединилось, то завершаем работу. если тайм-аут, то второго приложения нет, мы первая копия, открываем порт на прослушку и вперед.
Ответить с цитированием
  #7  
Старый 07.09.2010, 09:21
Rat Rat вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 391
Репутация: 6078
По умолчанию

А если то что вы предлагаете файерволом заблокируют? Тогда не будет такая защита работать.
Ответить с цитированием
  #8  
Старый 16.09.2010, 16:26
perkalaba perkalaba вне форума
Прохожий
 
Регистрация: 06.09.2010
Сообщения: 3
Репутация: 10
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  if FileOpen('1.txt',fmOpenWrite or fmShareExclusive)<=0 then
   begin
    MessageDlg('Програма yже запущена', mtError,[mbOk],0);
    Halt
   end;
end;

вот решение, кому интересно
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:35.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter