Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.28;
Скачать: CL | DM;

Вниз

Как избежать повторного запуска exe-файла?   Найти похожие ветки 

 
KVBr ©   (2002-10-16 15:39) [0]

Как избежать повторного запуска exe-файла, если титл окна может динаммически меняться во время работы с приложением?


 
Romkin ©   (2002-10-16 15:42) [1]

FAQ


 
KVBr ©   (2002-10-16 16:04) [2]

В FAQ разобраны примеры для обработки приложения, зная его хендл. В моем случае хендл окна меняется. Как быть?


 
Zemal ©   (2002-10-16 16:06) [3]

Я делаю так:


program Project1;

uses
Forms,
Windows,
Dialogs,
uMain in "uMain.pas" {fMain};

{$R *.res}

var
UniqueMapping: THandle;
begin
UniqueMapping := CreateFileMapping($ffffffff,
nil, PAGE_READONLY, 0, 32, "MyMap");
if UniqueMapping = 0 then
begin
ShowMessage("Ошибка выделения памяти!");
Halt;
end else
if GetLastError = ERROR_ALREADY_EXISTS then
begin
ShowMessage("Вторую копию приложения запускать нельзя!");
Halt;
end;
Application.Initialize;
Application.CreateForm(TfMain, fMain);
Application.Run;
end.



Такой код в файле проекта будет тебе гарантией, что две копии твоей программы незапустит никто :). Пользуй на здоровье! :)


 
Alx2 ©   (2002-10-16 16:07) [4]

Создай именованный объект ядра. Например, mutex. В проге проверяй его существование. Если он есть, значит запущен экз. уже. Опять таки см. в FAQ


 
Внук ©   (2002-10-16 16:09) [5]

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


 
Вячеслав ©   (2002-10-16 16:10) [6]

Это типа работает себе, работае, и вдруг БАЦ! хендл поменялся.
FAQ 2 раза :)


 
Внук ©   (2002-10-16 16:12) [7]

И вдруг БАЦ - вторая смена :)))


 
KVBr ©   (2002-10-16 16:44) [8]

Может я некорректно сформулировал вопрос. Я имел в виду динамически меняющийся хендл внешнего приложения (например,Lotus Notes) запускаемого exe моего приложения.


 
Zemal ©   (2002-10-16 16:54) [9]

Ну так я же тебе написал... создавай Map-файл в памяти. Вторая копия приложения будет пытаться создать точно такой же, но наткнётся на такой же и несможет, а потому закроется до инициализации... что тут непонятного?! Всё довольно просто.


 
Zemal ©   (2002-10-16 17:05) [10]

>>KVBr
Ну что? Подходит тебе мой вариант с созданием пустого Map-файла в памяти?
P.S. При закрытии твоего приложения этот "мар" будет удалён автоматом. Попробуй. У меня работает без сбоев.


 
Zemal ©   (2002-10-16 17:10) [11]

Кстати!
>>В FAQ разобраны примеры для обработки приложения, зная его хендл. В моем случае хендл окна меняется. Как быть?
Как такое может быть? Хендл окна это совсем не его "титл", а идентификатор и меняться он неможет!


 
Zemal ©   (2002-10-16 17:13) [12]

Хендл окна независит от титла.


 
KVBr ©   (2002-10-16 17:23) [13]

Zemal, спасибо, все Ok!


 
Zemal ©   (2002-10-16 17:26) [14]

>>KVBr
Да незачто :). В общем-то я уже пару раз такое выкладывал в этот форум... можно было в архивы глянуть... там и других подобных вариантов полно было :). Это в общем-то довольно распространённый вопрос :).



Страницы: 1 вся ветка

Текущий архив: 2002.10.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
1-92530
wer
2002-10-16 10:06
2002.10.28
Границы кнопки


4-92775
Igor_thief
2002-09-13 13:00
2002.10.28
Работа с dll


1-92489
Mav
2002-10-18 12:35
2002.10.28
Работа с булевыми выражениями


1-92611
Cker
2002-10-12 23:58
2002.10.28
А как-бы мне строку, введенную в edit преобразовать в unicode???


3-92374
alenka
2002-10-06 00:49
2002.10.28
Как реализовать каскадное удаление?