Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Вниз

Почему Мьютекс срабатывает на другую программу?   Найти похожие ветки 

 
Aleksandr   (2003-12-24 13:29) [0]

У меня во всех программах при запуске идет проверка на то, что программа уже была запущена. И вот с одной из них происходит казус. Если запущена программа1, в которой проверка выглядит так:

// dpr


var
XHM: THandle;

function CheckExists: boolean;
begin
XHM := OpenMutex(MUTEX_ALL_ACCESS, false, "ATT3Mutex");
Result := (XHM <> 0);
if XHM=0 then
XHM := CreateMutex(nil, false, "ATT3Mutex");
end;

begin
if CheckExists then begin
RiMessage(Application.Handle,h_Information,h_ProgramAlreadyRun);
Exit
end;
try
Application.Initialize;
...
finally
CloseHandle(XHM)
end
end.


то при попытке запустить программу2, в которой проверка выглядит вот так:


var
_HMRS: THandle;

function CheckExists: boolean;
begin
_HMRS:=OpenMutex(MUTEX_ALL_ACCESS, false, "ATBASE_Mutex");
Result:=(_HMRS<>0);
if NOT Result then
CreateMutex(nil, false, "ATBASE_Mutex")
end;

begin
if CheckExists then begin
RIMessage(Application.Handle," Уведомление ","Программа уже запущена!"#13#10^M"Повторный запуск отменен.");
Exit
end;
try
Application.Initialize;
...
finally
CloseHandle(_HMRS)
end
end.


эта самая программа2 выгружается безо всяких сообщений, а на передний фон виндов вылезает программа1. При этом в обратном порядке (программа2, затем программа1) все нормально.

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


 
Digitman   (2003-12-24 14:21) [1]

попробуй-ка в программе 2 на время заменить вызов RIMessage() на банальный MessageBox(0, "", "", mb_ok)

если ситуация изменилась в сторону ожидаемой, то проблема - в неизвестно чем, называемом в дан.примере RIMessage()


 
Digitman   (2003-12-24 15:46) [2]

function CheckExists: boolean;
begin
hMutex := CreateMutex(nil, false, "ATBASE_Mutex");
Result := GetLastError = ERROR_ALREADY_EXISTS;
end;


 
Aleksandr   (2003-12-24 20:59) [3]

RiMessage - это надстройка над стандартной MessageBox:


function RiMessage(aHandle : HWND; aCaption, aText : string; const aButtons : word=MB_OK) : word;
var
M : word;
begin
M:=aButtons;
if ANSISameText(aCaption,h_ConfirmationRus) OR ANSISameText(aCaption,h_ConfirmationEnu) then
M:=M OR MB_ICONQUESTION
else if ANSISameText(aCaption,h_ErrorRus) OR ANSISameText(aCaption,h_ErrorEnu) then
M:=M OR MB_ICONERROR
else if ANSISameText(aCaption,h_WarningRus) OR ANSISameText(aCaption,h_WarningEnu) then
M:=M OR MB_ICONWARNING
else if ANSISameText(aCaption,h_InformationRus) OR ANSISameText(aCaption,h_InformationEnu) then
M:=M OR MB_ICONINFORMATION
else
M:=M OR MB_ICONASTERISK;
if aHandle=0 then
M:=M OR MB_SYSTEMMODAL;
Result:=MessageBoxEx(aHandle,PChar(aText),PChar(aCaption),M OR MB_DEFBUTTON1 OR MB_APPLMODAL OR MB_TOPMOST, LANG_RUSSIAN)
end;


 
Digitman   (2003-12-25 09:37) [4]


> Aleksandr


ну ты попробовал мой вариант [2] ?



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

Форум: "WinAPI";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
1-93971
oss
2004-02-17 14:06
2004.02.29
запустить системные программы


7-94221
egornik
2003-12-11 18:23
2004.02.29
ДРАЙВЕР


3-93792
Delph
2004-02-02 17:26
2004.02.29
MSSQL2000


14-94094
DDA
2004-02-05 20:01
2004.02.29
ShareWare Project


3-93809
Карелин Артем
2004-02-03 13:25
2004.02.29
Как сделать такой запрос?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский