Hallo Community,
was möchte ich erreichen?:
Die Anwendung soll pro Datenbank-Verbindung nur einmalig geöffnet werden können.
meine Lösungsidee:
Durch das Verwenden von "
Mutex" mit Bezeichner (Anwendungsname + Verbindungsinfo) wird überprüft, ob das Programm mit dieser
DB-Verbindung bereits läuft.
mein Problem:
Das
Mutex verhalten zwischen Prozessen ist sehr merkwürdig.
Ich starte meine Testanwendung (siehe code unten bzw. Anhang) 2 mal.
locken in 1. Anwendung
locken in 2. Anwendung schlägt fehl
unlocken in 1. Anwendung
locken in 1. Anwendung schlägt fehl
Habt ihr eine Idee?
Delphi-Quellcode:
//prozedur zum locken
procedure TForm1.btn1Click(Sender: TObject);
var
LMutex: THandle;
begin
LMutex := CreateMutex(nil, True, pCHAR('test'));
if (LMutex = 0) or (GetLastError <> 0) then
begin
MessageDlg(SysErrorMessage(GetLastError), mtInformation, [mbOk], 0);
end
else
FMutex := LMutex;
end;
//prozedur zum unlocken
procedure TForm1.btn2Click(Sender: TObject);
begin
ReleaseMutex(FMutex);
CloseHandle(FMutex);
end;