Beim Programmstart evtl. geöffnete andere Instanzen beenden



  • Hi,

    ich habe eine Dialogfeldbasierende Anwendung geschrieben. Diese erzeugt beim Start einen Mutex. Sollte dieser Mutex bereits vorhanden sein, also eine Instanz des Programms bereits gestartet sein, dann erscheint momentan eine Fehlermeldung und das Programm beendet sich wieder.
    Nun möchte ich die andere Instanz in oben geschildertem Fall beenden und mit der neu gestarteten fortfahren. Zuerst habe ich versucht mittels "PostMessage" die Nachricht "WM_CLOSE" zu senden. Das Problem ist aber, dass besagte Anwendung ohne Dialogfeld startet, sofern dies nicht in einem Startparameter explizit angegeben ist. Daher konnte ich über die Funktion "FindWindow" die andere Instanz nicht eindeutig herausfiltern.
    Anschließend habe ich den Prozess gesucht und mir ein Handle auf ihn geholt. Hier im Forum habe ich irgendwo gelesen, ich könnte mit "GetExitCodeProcess" und anschließendem "ExitProcess" den Prozess beenden. Aber anscheinend beendet letzteres nur die eben gestartete Instanz des Programms. Mit "TerminateProcess" möchte ich nicht arbeiten, da ich den Prozess nur beenden und nicht abschießen möchte.

    Ich suche also eine Möglichkeit, wie ich der anderen Instanz eine selbst definierte Nachticht schicken oder sie anderweitig beenden kann, ohne in einer Datei oder der Registry ein Flag zu setzen, welches die zuerst gestartete Instanz regelmäßig prüft und sich daraufhin gegebenenfalls beendet.

    Ich bin für jeden Tipp dankbar.

    Grüße!

    Dani



  • Sorry, aber deine Lösung ist nicht Userfreundlich 😉
    Sinnvoller wäre es die andere Instanz in den Vordergrund zu holen und dann die eigene zu beenden.
    Stell dir vor der User arbeitet mit deinem Programm, speichert nicht ab und öffnet aus Versehen eine neue Instanz :p

    Grüße Rapha



  • Hi Rapha,

    Naja, vll sollte ich noch was zu dem Zweck des Programms sagen. Das Programm soll hinterher in einem Reisebüro laufen und jedesmal, wenn jemand daran vorbeigeht (Signal vom Bewegungsmelder an den PC (LPT1)) soll über einen außen angebrachten Funklautsprecher ein _Urlaubssound_ ertönen, welcher den potentiellen Kunden ins Büro locken soll.

    Das Proggy läuft also ohne Fenster im Hintergrund und erledigt dies automatisch. Es verfügt allerdings auch über einen Einstellungsdialog, den ich mit dem Startparameter "-config" aufrufen kann. Um die Einstellungen zu übernehmen muss ich aber das Programm neu initialisieren. Das einfachste wäre IMHO das laufende zu beenden, die Einstellungen vorzunehmen und dann die neu gestartete Instanz zu initialisieren.
    Ich könnte natürlich auch dem laufenden nach den Einstellungsänderungen den Befehl zum neu initialisieren geben, wobei ich wieder bei meinem Anfangs geschilderten Problem angekommen bin: Wie kann ich einem Proggy, von dem ich nur den Prozess-Handle hab eine Nachricht schicken ?

    cu, Dani



  • fällt niemandem was dazu ein ?


Anmelden zum Antworten