AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Sonstiges Delphi Weitere Programm-Instanzen verhindern mit Parameterübergabe

Weitere Programm-Instanzen verhindern mit Parameterübergabe

Ein Thema von Shaman · begonnen am 19. Jul 2006 · letzter Beitrag vom 8. Mär 2010
Antwort Antwort
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#1

Weitere Programm-Instanzen verhindern mit Parameterübergabe

  Alt 19. Jul 2006, 22:10
Hey there

Hier eine Komplettlösung für das oft behandelte Thema, nur eine Anwendungsinstanz zuzulassen und dabei die Kommandozeilen-Parameter an die bereits laufende Instanz weiterzugeben.

OneInstance.pas
  • Einfache Anwendung: Die Unit muss lediglich in einer beliebige Uses-Klausel (Optimal: In der Projektdatei) aufgeführt werden, um weitere Anwendungsinstanzen zu verhinden. Diese werden dabei frühstmöglich beendet, sodass Formulare und andere Ressourcen gar nicht erst geladen werden.
  • Über den Prozedurenzeiger NewInstProc kann eine Ereignisprozedur festgelegt werden, um in der laufenden Anwendung z.B. die Kommandozeilen-Parameter der neu gestarteten Instanz auszuwerten und diese ggf. zu beenden:
    Delphi-Quellcode:
    type
      TNewInstProc = procedure(ProcessId: Cardinal; CmdLine: string; var Allow: Boolean);

    var
      NewInstProc: TNewInstProc;
  • Kompakt gehaltene NonVCL-Unit, wenig Overhead

InstanceCheck.pas
  • Enthält die Komponente TInstanceCheck, über welche sich die Einstellungen für OneInstance bequem über den OI verwalten lassen
  • Benötigt weniger Ressourcen als ein Timer

You're welcome
Shaman

[edit=Daniel G] Mfg, Daniel G[/edit]
Angehängte Dateien
Dateityp: zip oneinstance_157.zip (3,7 KB, 518x aufgerufen)
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#2

Re: Weitere Programm-Instanzen verhindern mit Parameterüberg

  Alt 8. Mär 2010, 11:27
himitsu hat ein paar Anmerkungen und Verbesserungen in die beiden Units einfließen lassen:

Zitat:
[..]
- 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.

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.
Die aktualisierte Version befindet sich im ersten Beitrag.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz