COM (Component Object Model): CLSIDs und verschiedene Versionen des Servers



  • Hallo,
    kennt sich hier noch jemand mit COM (Component Object Model) aus?
    Im Prinzip muss ja jedes Interface seine CLSID haben.
    Wir haben jetzt eine EXE die als COM Server fungiert, also Interfaces mit CLSIDs bereitstellt.
    Die werden dann von einem anderen Prog aus ausgerufen.

    Nun zur Frage.
    Im Laufe der Entwicklung ändert sich die Implementierung und teils auch die Interfaces immer mal wieder.
    Müsste ich da theoretisch immer neue CLSIDs generieren?
    Die Frage wird dann brennend, wenn es darum geht verschiedene Versionen der EXE gleichzeitig laufen zu haben.
    Bis jetzt ist es so dass wir zB eine EXE v1 (Server1) registrieren, dann den Client1 starten, dann wird die EXE v2 (Server2) registriert und dann der Client2 gestartet.
    Aber wie gesagt die EXEs haben eben dieselben CLSIDs.
    Is that asking for trouble?

    Wie sollte das gemanaged werden? Sollte jeder neue Build neue CLSIDs vergeben?

    Die Techno ist für mich selbst noch ziemlich diffus, falls das oben die falschen Gedanken sind.
    In dem Fall bitte nachfragen.
    Erst mal sehen ob überhaupt jemand das Thema kennt.



  • Is that asking for trouble?

    Ja.

    Interfaces haben eine IID, Klassen eine CLSID.
    Bei inkompatiblen Änderungen müssen beide eine neue ID bekommen. Wobei "inkompatibel" bei Interfaces nicht trivial zu erklären ist, am einfachsten du gehst davon aus dass jede Änderung inkompatibel ist.
    Bei Klassen ist es relativ einfach: du kannst ihnen neue Interfaces spendieren aber du solltest keine wegnehmen.
    Und dann gibt es noch die AppID. Wenn du mehrere Versionen des selben COM Servers parallel installieren willst sollte die glaube ich auch unterschiedlich sein.

    Wie sollte das gemanaged werden? Sollte jeder neue Build neue CLSIDs vergeben?

    Das wäre doof wenn du mal nen Hotfix machen willst, nen? Üblicherweise macht man neue Interfaces/CLSIDs genau dann wenn man was ändert was eine neue IID/CLSID erfordert.

    Aber vielleicht wäre zu überdenken ob es überhaupt verschiedene COM Server sein müssen. Du kannst ja z.B. der selben Klasse mehrere Interfaces verpassen, so dass alte und neue Programme mit der neuen Version der Klasse arbeiten können.



  • Verstehe.
    Bei uns ist das allerdings so, das Client und Server beide von uns kommen und immer die gleichen Versionen/Patches zusammen laufen sollten.
    Deshalb war es auch bisher kein Problem mit der gleichen CLSID/AppID. Eine neuere Version hat einfach immer die alte ersetzt.
    Beim Kunden läuft daher alles wie gewünscht.
    Wir haben nur bei uns Probleme wo wir zu Testzwecken unterschiedliche Versionen auf der gleichen Maschine laufen lassen möchten.


Log in to reply