Ich mache es so: der/das
Mutex wird erst erzeugt, nachdem alle Programmparameter abgearbeitet sind. Die zweite Instanz wird mit einem bestimmten Parameter gestartet und wenn der gefunden wird, schließt die zweite Instanz die erste bereits laufende.
Mal in Code-Form (Auszug aus der .dpr):
Delphi-Quellcode:
begin
if (ParamCount > 0) then
begin
Params:= ParamStr(1);
if (Params = 'runas') then
begin
SendMessage(StrToInt(ParamStr(2)), WM_CLOSE, 0, 0);
end;
end;
hMutex:= CreateMutex(nil, True, PRODUCTNAME + PRODUCTNAME + PRODUCTCOPYRIGHT);
if GetLastError = ERROR_ALREADY_EXISTS then
(* Weiterer hierfür nicht relevanter Code *)
if hMutex <> 0 then
CloseHandle(hMutex);
end.
Ich glaube, ParamStr(2) war die PID oder so, damit die Message nur an die laufende erste Instanz gesendet wird.
MfG Dalai