![]() |
Programmstart nur 2 mal zulassen
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? |
Re: Programmstart nur 2 mal zulassen
Mit Semaphoren und einer bisher undokumentierten NT-Funktion könntest Du zählen (
![]() Viele Grüßer |
Re: Programmstart nur 2 mal zulassen
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. |
Re: Programmstart nur 2 mal zulassen
gut, ich weiß daß es das gibt, aber die Suche findet da bestimmt auch so Einiges :zwinker:
![]() |
Re: Programmstart nur 2 mal zulassen
Zitat:
![]() Aus der JCL Doku zu JclAppInst.pas: Zitat:
|
Re: Programmstart nur 2 mal zulassen
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? |
Re: Programmstart nur 2 mal zulassen [gelöst]
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. |
Re: Programmstart nur 2 mal zulassen
Und wenn ich die EXE kopiere und umbenenne und dann Starte?
|
Re: Programmstart nur 2 mal zulassen
Ein Beispiel aus der Codelib erweitert auf zwei Instanzen.
Delphi-Quellcode:
Grüße
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. Klaus |
Re: Programmstart nur 2 mal zulassen
Zitat:
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 :(. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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-2025 by Thomas Breitkreuz