![]() |
OneInstance.pas
In der Codelib befindet sich der Beitrag OneInstance.
Leider funktioniert die Componente nicht mehr mit D2010. (Der Parameter Kommandozeile enthält die ersten paar Zeichen und dann Zeichensalat. - Anpassung Unicode) Ehe ich mich selber an die Arbeit mache, möchte ich mal ganz vorsichtig anfragen, ob wer das Problem schon gelöst hat und ich mir die Arbeit ersparen kann? Gruß Peter |
Re: OneInstance.pas
Liste der Anhänge anzeigen (Anzahl: 1)
Ist ja jetzt nix groß Aufwändiges.
- das Problem lag im befüllen und auslesen des TCopyDataStruct - theoretisch müßte es jetzt unter allen Delphi-Versionen lauffähig sein - Probleme wird es aber ab Win7 geben, wenn z.B. die laufende Instanz Adminrechte besitzt und die neue Instanz mit geringeren Rechten (einfacher Benutzer) gestartet wurde, dann dann kann aus "Sicherheitsgründen" (laut MS) die Windowsbotschaft nicht verschickt werden, da dieses geblockt wird. Es wäre auch Besser/Schöner, wenn man bei sowas auch gleich den Link zum Thread mit angibt ... erstpart etwas Arbeit :zwinker: ![]() Weitere behobene Dinge: In ExtractParams konnte es zu einem Problem kommen, wenn es keine Parameter gibt. P1 := Pointer(S); liefert in soeinem Fall einen NIL-Pointer und z.B. while P1^ <> #0 do läuft beim dereferenzieren in eine Exception. Beim NewInstProc (TNewInstProc) wurde der Parameter ProcessId mit cbData (der Datenlänge des TCopyDataStruct) gefüllt ... hab dort jetzt schnell erstmal wenigstens das Window-Handle eingetragen. |
Re: OneInstance.pas
Zitat:
Man Du bist gut, ich habe nur kurz probiert und hätte mich dann heute Vormittag dran gemacht. Für meine Aufgabe haben alle Programme die gleiche Berechtigung. Ich habe mir ein Plugin-System auf der Basis von Exe-Files gebaut und will die Komponente hier verwenden. Gruß Peter |
Re: OneInstance.pas
Danke himi, den Beitrag in der CL aktualisiere ich schonmal. Bevor ichs in 2 Wochen vergesse. :mrgreen:
Diesen Thread hier lasse ich noch offen, falls ich irgendwas übersehen haben sollte und sich hier eventuell noch ein Fehler versteckt hat. ;) |
Re: OneInstance.pas
Zum Thema OneInstance:
Ein Hinweis für alle, die nur verhindern wollen, dass eine zweite Instanz eines Programms gestartet wird und das neu gestartete Programm abbrechen wollen, wenn es schon eine solche gibt, ohne dem anderen Programm eine Nachricht zu schicken: Für diese Aufgabe gibt es das wenig bekannte Windows Mutex Objekt, das diese Aufgabe auf einfachste Art erledigt:
Delphi-Quellcode:
procedure AbortIfNotUnique (const Bezeichnung: string);
begin createMutex( nil, true, PWideChar(Bezeichnung)); if GetLastError = ERROR_ALREADY_EXISTS then begin MessageDlg('Das Programm '+Bezeichnung+' ist schon in Betrieb'#13#10 +'Sie können immer nur eine Version des Programmes starten', mtError,[mbOk],0); halt; end; end; |
Re: OneInstance.pas
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz