|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
защита приложения от повторного запуска по сети
Есть два компютера, соединенных сетью. На одном из них установлено приложение, которое можно запускать на обоих машинах. Единственное условие - чтоб одновременно не можно было его запустить на обеих компютерах.
Код:
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, 06.09.2010 в 16:08. |
#2
|
||||
|
||||
CreateNamedPipe/ConnectNamedPipe
|
#3
|
|||
|
|||
спасибо... а нет под рукой примера, чтоб я не гуглил?
|
#4
|
||||
|
||||
Цитата:
Кнопка "+" - весы в правом верхнем углу сообщения... |
#5
|
||||
|
||||
очень грубо
сервер: Код:
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
|
|||
|
|||
Приложение открывает некоторые tcp порт и слушает его. это внормальном режиме. при старте приложение сначала пытается присоединиться к другому приложению по нашему порту. если присоединилось, то завершаем работу. если тайм-аут, то второго приложения нет, мы первая копия, открываем порт на прослушку и вперед.
|
#7
|
|||
|
|||
А если то что вы предлагаете файерволом заблокируют? Тогда не будет такая защита работать.
|
#8
|
|||
|
|||
Код:
procedure TForm1.FormCreate(Sender: TObject); begin if FileOpen('1.txt',fmOpenWrite or fmShareExclusive)<=0 then begin MessageDlg('Програма yже запущена', mtError,[mbOk],0); Halt end; end; вот решение, кому интересно |