Announcement

Collapse
No announcement yet.

Wie aus COM-Client feststellen, ob ein COM-Server registriert ist

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

  • Wie aus COM-Client feststellen, ob ein COM-Server registriert ist

    Hallo COM-Kenner,

    gibt es eine Möglichkeit von einem Programm aus festzustellen, ob sich ein anderes Programm bereits als COM-Server (Local Server) im System registriert hat?

    Hintergrund: Wir liefern verschiedene Programme an unsere Kunedn aus, die sich gegenseitig via COM diverse Funktionen als Erweiterung zur Verfügung stellen. Beim Start eines COM-Clients soll dieser nun automatisch erkennen, ob der COM-Server auf dem Windows-System registriert ist und im positiven Fall die entsprechenden Menüpunkte/Buttons etc. freischalten.

    Da wir sowohl Server als auch Client selbst entwickeln, liegen alle Typbibliotheken und damit auch alle GUIDs etc. vor - falls das hilft.

    In dem handlichen Zuschlagewerk COM/DCOM/COM+ von Andreas Kosch bin ich (bis hin zur Seite 520) nicht fündig geworden - oder habe es überlesen.

    Hier im Forum bin ich bislang auf die beiden Alternativen "Server testweise starten" oder "direkt in Registry nachgucken" gestoßen; aber ich denke (hoffe), dass COM von sich aus in der Lage sein müßte, eben diese Frage zu beantworten, z.B. mit einem schicken Funktionsaufruf oder ähnlichem. Oder bin ich da mit meiner Annahme auf dem Holzweg?

    Ach ja: ne COM+-Lösung wird mir nicht helfen, da wir leider ein paar Kunden haben, die immer noch Win95/Win98(!) einsetzen... :-( Entwicklungsumgebung ist D5 Enterprise (jajaichweiß).

    tia

    Udo "Kretabiker" Treichel

  • #2
    > aber ich denke (hoffe), dass COM von sich aus in der Lage sein müßte, eben diese Frage zu beantworten,

    Ja, indem es für die entsprechende GUID in der Registry nachschaut in welcher Exe/DLL die Implementierung vorhanden ist. Dies ist jedenfalls das interne Suchverfahren für Win95-2003 und da wird MS nichts mehr ändern da ja eh alles nach MS-Willen richtung .NET geht

    Comment


    • #3
      Hallo Bernhard,

      vielen Dank für die schnelle Antwort. Also ist die Suche in der Registry tatsächlich der richtige Weg.

      Thanx und frohe Ostern

      Comment


      • #4
        Eher das Dummy-Erzeugen des Objektes. Aber wenn man das nicht will ist AFAIK die Registry die beste mir bekannt Möglichkeit

        Comment


        • #5
          Falls jemand anderes vor der gleichen Frage steht: Hilfreich ist in diesem Fall die Funktion ClassIDtoProgID aus der Unit ComObj.

          Einfach die TGUID CLASS_xyz aus der Typbibliothek des Servers als Parameter übergeben, und schon läßt sich mit einer Zeile festestellen, ob ein COM-Server registriert ist.

          Damit spare ich mir das mauelle Nachsehen in der Registry oder das Dummy-erzeugen des Objektes.

          Jetzt hoffe ich nur, dass ich nicht auf einer völlig falschen Fährte bin und später irgendwelche Komplikationen auftreten - bislang funktioniert es zumindest..

          Comment

          Working...
          X