Форум: "Начинающим";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
ВнизКак запретить многократный запуск процесса? Найти похожие ветки
← →
DROWSY © (2006-09-29 19:01) [0]Как в программе проверить запущен ли уже в системе её экземпляр и запретить исполнение "дубля"?
← →
X9 © (2006-09-29 20:01) [1]Напрмер так.
При запуске программы пытаемся создать семафор (мьютекс). Если таковой уже имеется - закрывыаемся.
program Project1;
uses
Forms,
Unit1 in "Unit1.pas" {Form1},
Windows;
{$R *.res}
var
hMutex: Integer;
begin
hMutex := CreateMutex(nil, True, "My program mutex");
if GetLastError <> 0 then
begin
MessageBox(0, "Нельзя запустить программу дважды.", "Предупреждение", MB_OK or MB_ICONWARNING);
Halt;
end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
ReleaseMutex(hMutex);
end.
← →
Fay © (2006-09-29 23:35) [2]2 X9 © (29.09.06 20:01) [1]
1) почему hMutex Integer, а не THandle какой-нибудь?
2) Зачем ReleaseMutex в самом конце?
3) Где проверка hMutex на 0.
4) ERROR_ALREADY_EXISTS - не единственная возможная ошибка.
← →
Мурзилка (2006-09-29 23:47) [3]program Project1;
uses
Forms,
Windows,
Unit1 in "Unit1.pas" {Form1},
{$R *.res}
var
HM: THandle;
function Check: boolean;
begin
HM := OpenMutex(MUTEX_ALL_ACCESS, false, "MyOwnMutex");
Result := (HM <> 0);
if HM = 0
then HM := CreateMutex(nil, false, "MyOwnMutex")
else Application.MessageBox("Программа уже запущена!", "Предупреждение",
MB_OK + MB_ICONEXCLAMATION+MB_DEFBUTTON1);
end;
begin
Application.Initialize;
if Check then Exit; //проверка на повторный запуск программы
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
← →
X9 © (2006-09-30 05:02) [4]> [2] Fay © (29.09.06 23:35)
Я хотел упростить :)
В данному слаучае, IMHO, не имеет особого значения - THandle или Integer.
А ставить проверки на все возможные ошибки - дело автора программы.
Я лишь показал, в какую сторону копать.
← →
Loginov Dmitry © (2006-09-30 10:05) [5]Можно совсем просто:
CreateMutex(nil, {True | False}, "My program mutex");
if GetLastError = ERROR_ALREADY_EXISTS then Halt;
В принципе, ничего другого не нужно, и лишнего тоже ничего нет. Закрывать указатель не требуется, он будет закрыт автоматически.
← →
Desdechado © (2006-09-30 15:00) [6]в FAQ http://www.delphimaster.ru/faq.shtml есть много вариантов для сабжа, в том числе и с мьютексами
← →
Сергей М. © (2006-09-30 20:55) [7]
> Как запретить многократный запуск процесса?
В общем случае - никак.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c