AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Programmstart nur 2 mal zulassen
Thema durchsuchen
Ansicht
Themen-Optionen

Programmstart nur 2 mal zulassen

Ein Thema von LokutusvB · begonnen am 31. Mär 2009 · letzter Beitrag vom 1. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#1

Programmstart nur 2 mal zulassen

  Alt 31. Mär 2009, 17:47
Hallo Leute,

ich möchte in meiner Delphi-Anwendung externe Programme starten können. Das funktioniert so weit sehr gut. Nun möchte ich aber für verschiedene Applikationen den Start nicht auf einmalig (Only One Instance - Beispiele findet man ja im netz zur Genüge) setzen, sondern den Start einer Anwendung 2 mal gleichzeitig erlauben. Allerdings stehe ich zur Zeit total auf dem Schlauch, wie ich das machen soll . Mit getLastError = ERROR_ALREADY_EXISTS komme ich nicht wirklich weiter, das nutze ich schon für die Delphianwendung selbst.

Hat hier jemand Lösungsansätze?
MFG
LokutusvB
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Programmstart nur 2 mal zulassen

  Alt 31. Mär 2009, 17:52
Mit Semaphoren und einer bisher undokumentierten NT-Funktion könntest Du zählen (Hier im Forum suchenQuerySemaphore) z.B...

Viele Grüßer
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.581 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Programmstart nur 2 mal zulassen

  Alt 31. Mär 2009, 17:55
Du könntest zwei Mutexe benutzen, und wenn einer existiert, den zweiten für deine Instanz versuchen. Existieren beide, laufen zwei Instanzen.
Den Rest findest du ja in den Beispielen für eine Instanz.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#4

Re: Programmstart nur 2 mal zulassen

  Alt 31. Mär 2009, 17:57
gut, ich weiß daß es das gibt, aber die Suche findet da bestimmt auch so Einiges

http://www.delphipraxis.net/internal...t.php?t=153232
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Programmstart nur 2 mal zulassen

  Alt 31. Mär 2009, 19:14
Zitat von LokutusvB:
Hallo Leute,

ich möchte in meiner Delphi-Anwendung externe Programme starten können. Das funktioniert so weit sehr gut. Nun möchte ich aber für verschiedene Applikationen den Start nicht auf einmalig (Only One Instance - Beispiele findet man ja im netz zur Genüge) setzen, sondern den Start einer Anwendung 2 mal gleichzeitig erlauben. Allerdings stehe ich zur Zeit total auf dem Schlauch, wie ich das machen soll . Mit getLastError = ERROR_ALREADY_EXISTS komme ich nicht wirklich weiter, das nutze ich schon für die Delphianwendung selbst.

Hat hier jemand Lösungsansätze?
In der Jedi Code Library gibt es in der Unit JclAppInst Funktionen, die eine bestimmte Anzahl Instanzen zulassen (von 1 bis <beliebige Zahl>), wobei <beliebige Zahl> natürlich eine natürliche Zahl ist.

Aus der JCL Doku zu JclAppInst.pas:

Zitat:
"This unit contains a class and support routines for controlling the number of concurrent instances of your application that can exist at any time. In addition there is support for simple interprocess communication between these instance including a notification mechanism."
Cheers,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#6

Re: Programmstart nur 2 mal zulassen

  Alt 1. Apr 2009, 14:40
Vielen Dank für die Lösungsansätze.
Leider kann ich momentan damit nicht viel anfangen, da all die Lösungen auf die GUID angewiesen sind. Die Applikationen, die ich starte, besitzen keine solche ID. Allerdings konnte ich mit Hilfe von WinSight32 zumindest den Klassenname ermitteln. Kann ich mit diesem etwas anfangen,das Programm nur 2 mal starten zu lassen? Kann ich einen Mutex so einfach auf einen Klassenname setzen?

Zusatz:
Oder ist es möglich, das ganze über den Prozessname zu kontrollieren?
MFG
LokutusvB
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#7

Re: Programmstart nur 2 mal zulassen [gelöst]

  Alt 1. Apr 2009, 16:07
So habe ich das problem gelöst bzw. löse es gerade nach diesem Chema:

Laufende Prozesse auflisten, Anzahl gewünschter Prozesse ermitteln, auswerten...

Das erscheint mir einfacher als diese komplizierten und leider nur schlecht erklärten Mutex- pzw. Semaphoren-Lösungen.
MFG
LokutusvB
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.927 Beiträge
 
Delphi 12 Athens
 
#8

Re: Programmstart nur 2 mal zulassen

  Alt 1. Apr 2009, 16:18
Und wenn ich die EXE kopiere und umbenenne und dann Starte?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Programmstart nur 2 mal zulassen

  Alt 1. Apr 2009, 16:24
Ein Beispiel aus der Codelib erweitert auf zwei Instanzen.
Delphi-Quellcode:
unit NichtMehrAlsZweimalStarten;

interface

implementation

uses windows,Dialogs,sysutils;

var mHandle: THandle; // Mutexhandle

Initialization
  mHandle := CreateMutex(nil,True,'xxxxx');
  // 'xxxxx' Der Anwendungsname ist hier einzutragen
  if GetLastError = ERROR_ALREADY_EXISTS then
     begin
        CloseHandle(mHandle);
        mHandle:=CreateMutex(nil,True,'yyyyy');
        if GetLastError = ERROR_ALREADY_EXISTS then
          begin
            // Anwendung läuft zweimal
            {showMessage('Anwendung läuft bereits in zwei Instanzen');}    
            // Wenn du deine Meldung willst, mach die Klammern weg
            Halt;
          end:
     end;


finalization // ... und Schluß
  if mHandle <> 0 then
    CloseHandle(mHandle)
end.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#10

Re: Programmstart nur 2 mal zulassen

  Alt 1. Apr 2009, 16:26
Zitat von QuickAndDirty:
Und wenn ich die EXE kopiere und umbenenne und dann Starte?
Das ist nicht möglich, da das ganze über einen Terminalserver mit automatischem Programmstart ohne Desktop und Startmenü abläuft.

An Klaus01:
Daran dachte ich auch erst, danke für die Lösung. Leider funktioniert das nicht, da die Anwendung wohl keinen eindeutigen Namen und auch keine GUID hat, oder bin ich nur zu dumm, den Namen zu ermitteln .
MFG
LokutusvB
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:33 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