Ich hab's momentan erstmal folgendermaßen gelöst, auch wenn dadurch Race Conditions (welche Instanz ist schneller) nicht ausgeschlossen sind: Der Start via "Ausführen als" bekommt den Parameter "runas" mit:
Delphi-Quellcode:
function TMainForm.RunAs: Boolean;
var sei: TShellExecuteInfo;
begin
FillChar(sei, SizeOf(sei), 0);
sei.cbSize:= SizeOf(sei);
sei.Wnd:= Self.Handle;
sei.fMask:= SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
sei.lpVerb:= 'runas';
sei.lpFile:= PChar(Application.ExeName);
sei.lpParameters:= PChar('runas');
sei.nShow:= SW_SHOWNORMAL;
Result:= ShellExecuteEx(@sei);
end;
Vor dem Erzeugen des
Mutex prüfe ich auf Kommandozeilenparameter und wenn der erste "runas" ist, wird um eine halbe Sekunde verzögert via Sleep(500). Nicht besonders schön, aber das tut soweit. Dennoch bin ich für bessere Varianten offen
.
MfG Dalai