![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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;вот решение, кому интересно |