Ja, die fehlende Deklaration als Property war's, da war ich beim Lesen nicht aufmerksam genug. Und jetzt klappt's auch. Besten Dank.

Und dennoch, um die Funktionszusammenhänge wirklich zu verstehen (und um dann auch selbstständig handeln zu können), wünschte ich mir, dass 'mal jemand über all diese tieferliegenden Dinge, die auch im User's Guide nicht mehr erklärt werden, in einer Zusammenschau veröffentlicht. Es muss ja nicht gleich ein Buch sein. Vielleicht tät's auch ein Wiki mit systematischem Inhaltsverzeichnis, vielleicht können dann alle Verständigen, jeder ein Stückchen, daran mitschreiben. Wie ich sehe, komme ich jetzt mit einer ganzen Reihe von Fragen, die eine Etage tiefer in die Funktionsweise von Programmen kurz vor Betriebssystem-Ebene gehen. Da sind z.B.:
CriticalSection, Semaphore, Mutex
interfaces, Shell, API
Dabei geht es auch immer darum, dass so Leser wie ich sich eine bessere modellhafte Vorstellung davon entwickeln können, was eigentlich im Computer passiert, um mehr Selbstständigkeit entwickeln zu können UND NICHT BEI ALLEM DIE NEWS-GROUP FRAGEN ZU MÜSSEN!

also, einstweilen beste Grüße, Christian Hahn.

----- Original Message ----- From: "MGE Lists" <li...@pdf-konverter.de>
To: <realbasic-nug.de@lists.realsoftware.com>
Sent: Monday, March 08, 2010 11:45 AM
Subject: Re-2: Programm nicht 2 Mal starten


Christian,
zum Beenden des Programms. HastDu eventuell kein "DefaultWindow" in der App eingestellt und
irgendwo "App.AutoQuit = True" eingebaut?

Zum Mutex:
Wie ich es im Beispiel geschrieben hatte,
Du musst den Mutex in der App.Klasse als
Property / Eigenschaft definieren und nicht
im Open.Event.

Wenn Du "dim meinMutex as Mutex" im Open.Event definierst,
wird der Mutex automatisch von RB geschlossen "leave" wenn
"Open.Event" abgearbeitet ist!

Du willst ja aber erreichen, das der Mutex so lange existiert,
bis das Programm selbst geschlossen wird. Das sollte und macht RB
automatisch. Falls nicht, kannst Du im App.Close Event folgenden Code
einfügen.

// App.Property / Eigenschaft
myMutex As Mutex

// App.Open Event
myMutex = New Mutex( ExecutableFile.Name )
if Not myMutex.TryEnter then
 //
 MsgBox( "Eine Instanz des Programm läuft bereits!" )
 //
 Quit
end if

// App.Close Event
if myMutex <> Nil then
  myMutex.Leave
end if

Grüße
Thomas Nauck



-------- Original Message --------
Subject: Re: Programm nicht 2 Mal starten (07-Mrz-2010 17:11)
From:    Christian Hahn <christian.h...@snafu.de>
To:      li...@pdf-konverter.de

Hallo,

was ist jetzt passiert?
mit folgendem Code in App.Open startet das Programm, msgbox "läuft" kommt
auf und dann beendet sich das Programm. Eine zweite Instanz des Programms
wurde noch gar nicht versucht zu starten.
Aber jetzt! Nach Entfernung des codes, Absuchen des Windows Task-Manager
und
auch Neustart des Rechners schließt sich das Programm immer noch (obwohl
der
Code gar nicht mehr vorhanden ist).

  dim meinMutex as Mutex
  meinMutex = New Mutex( "ZensurenEingabe_19_Client.exe" )
  if Not meinMutex.TryEnter then
     msgbox "kein zweiter Programmstart"
     Quit
  else
     msgbox "läuft"
  end if

Das ist mir doch noch zu viel Rätselraten, die online-Hilfe und User's
Guide
Informationen reichen noch nicht zu meinem Verständnis.
Bisher verstehe ich: Die classes Semaphore, CriticalSection und Mutex haben

etwa alle die gleiche Absicht, sie reservieren die Benutzung einer sog.
resource für einen bestimmten anderen process.
Oder muss man sagen, ein process schützt sich vor der Benutzung durch einen

anderen process mithilfe eines Semaphore?
Davon hängt für mein Verständnis ab, wo die Klasse definiert wird und von
wem die Befehle enter und leave gesetzt werden.
Was alles kann eine resource sein?
Besonders im Falle des Mutex. Was an dem Programm wird geschützt bzw.
welche
resource versucht ein weiterer Progammstart zu benutzen?

einstweilen beste Grüße, Christian Hahn.

----- Original Message ----- From: "MGE Lists" <li...@pdf-konverter.de>
To: <realbasic-nug.de@lists.realsoftware.com>
Sent: Saturday, March 06, 2010 6:52 PM
Subject: Re: Programm nicht 2 Mal starten


Hallo Christian,
dafür nimmst Du am besten einen Mutex der als
Property in der App.Klasse definiert ist und
versuchst ihn im App.Open Event zu setzen.
Als Property, damit er während der kompletten
Programmlaufzeit erhalten bleibt.

  //
  myMutex = New Mutex( "Programmname" )
  if Not myMutex.TryEnter then
    //
    Quit
  end if

Grüße
Thomas

-------- Original Message --------
Subject: Programm nicht 2 Mal starten (06-Mrz-2010 17:10)
From:    Christian Hahn <christian.h...@snafu.de>
To:      li...@pdf-konverter.de

> Hallo, ich glaube mich zu erinnern, dass wir das hier schon 'mal hatten,
> aber ich finde es nicht wieder.
> Wie kann man verhindern, dass ein Programm nicht 2 Mal gestartet wird,
> oder
> genauer, wie kann man feststellen, ob ein Programm schon gestartet > wurde?
> beste Grüße, Christian Hahn.








Antwort per Email an