Announcement

Collapse
No announcement yet.

COM soll EXE mit Interface nicht beenden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • COM soll EXE mit Interface nicht beenden

    Hallo,

    habe eine EXE "B" geschrieben, die den Speicherbedarf anzeigt. Diese EXE "B" hat ein COM Interface (IConnectionPointContainer). Eine weitere EXE "C" benutzt das COM Interface und zeigt den Speicherbedarf auf seiner Oberfläche an. Funktioniert prima. Eine weitere EXE "A" hat die Fähigkeit, die EXE "B" als Datei zu finden und wenn sie noch nicht läuft, zu starten. Die EXE "A" zeigt die Oberfläche von EXE "B" in seiner PageControl. Wenn EXE "A" beendet wird, wird eine WM_CLOSE von "A" an "B" gesendet. Ist COM bei "B" nicht initialisiert, wird "B" beendet, sonst nicht, da EXE "B" ja von COM gestartet wurde. Auch wenn EXE "B" von COM gestartet wurde, findet EXE "A" durch BroadcastSystemMessage EXE "B" die sich bei EXE "A" meldet und sein Fensterhandle mitteilt, damit EXE "A" die Oberfläche einbinden kann.

    Problem:
    Wird EXE "B" via COM von EXE "C" gestartet, und wird dann EXE "A" gestartet, wird die Oberfläche von EXE "B" prima eingebunden. Wird jetzt allerdings EXE "C" beendet, wird auch EXE "B" beendet und die Oberfäche verschwindet in EXE "A".

    Frage:
    Wie kann ich verhindern, dass EXE "B" vom COM mechanismus beendet wird? HINWEIS: In EXE "B" ist bekannt, ob EXE "A" läuft.

  • #2
    Hallo,
    die Suche nach der Zeichenkette <b>CoAddRefServerProcess</b> liefert hier im FORUM einige Beispiele zurück. Wenn "B" darüber informiert ist, dass "A" die Dienste benötigt, kann sich "B" über diese Win32-API-Funktion selbst sperren, so dass der letzte Interface-Zeiger nicht mehr die Lebensdauer von "B" festlegt

    Comment


    • #3
      Danke, das was's, fluscht

      Comment


      • #4
        Es stellt sich nun noch ein anderes Problem:
        Wenn EXE "A" gestartet wird, findes es EXE "B" und startet es. Nun wird EXE "C" gestartet, die sich auch über das COM IF verbindet. Nun wird EXE "A" beendet. "B" läuft weiter, da ja "C" noch "B" braucht. Wird nun "C" beendet, läuft "B" weiter. "C" scheint ´nicht gemerkt zu haben, das es "B" alleine genutzt hat und eigentlich beenden sollte.
        Gibt es eine Möglichkeit den Referenzzähler abzufragen, damit ev. Programmtechnisch "B" beendet werden kann? Oder was gibt es sonst für eine Lösung, damit "C" merkt, dass es die Hoheit über "B" besitzt

        Comment

        Working...
        X