CLSID vs. ProgID

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

CLSID vs. ProgID

Beitrag von AUGE_OHR »

hi,

Ich wurde gefragt warum ich die CLSID statt der ProgID verwende ?

naja 1.) weil mir der FormDesigner XppFD.EXE diese per DragDrop liefert
und 2.) weil es meiner Erfahrung nach "der" Weg ist.

In der ProgID ist meistens die Versionsnummer mit enthalten und funktioniert
nach einem Update nicht mehr. Dies „sollte“ bei CLSID kein Problem sein.

Beispiel M$ Windows Media Player :
oWMP:CLSID := "{6BF52A52-394A-11D3-B153-00C04F79FAA6}"

//oWMP:CLSID := "WMPlayer.OCX.7"

nun gab es bis zur v6.4 eine andere CLSID, aber ab v7 gilt immer noch dieselbe CLSID
während die Versionen .8 .9 .10 .11 .12 … sein könnten.

Klar hält sich nicht jeder Hersteller daran (incl. M$ ), aber viele „leiten“ bei einem
Updates von der „alten“ automatisch auf die „neue“ um sodass die weiterhin „gültig“ ist.

es gibt also gute Gründe für CLSID ... und für ProgID ?

Kommentare und andere Erfahrungen erwünscht.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: CLSID vs. ProgID

Beitrag von brandelh »

AUGE_OHR hat geschrieben:In der ProgID ist meistens die Versionsnummer mit enthalten und funktioniert
nach einem Update nicht mehr. Dies „sollte“ bei CLSID kein Problem sein.
...
//oWMP:CLSID := "WMPlayer.OCX.7"
So wie ich das sehe kann man mit
CreateObject("Word.Application") versionsunabhängig und mit
CreateObject("Word.Application.8") versionsunabhängig arbeiten, falls dies sinnvoll ist.

Unter HKEY_CLASSES_ROOT steht auch

WMPlayer.OCX.7 -> versionsabhängig, und
WMPlayer.OCX -> das sollte versionsunabhängig sein.
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: CLSID vs. ProgID

Beitrag von Tom »

Die weitgehend (vereinfacht gesagt) numerische CLSID unterscheidet sich innerhalb einer Modulversion z.B. dadurch, wie sie lizensiert ist. Demoversionen haben andere CLSIDs als Vollversionen, und dann gibt es meiner Erfahrung nach auch noch Unterschiede je nach Ausstattung (Enterprise, Web, Server Edition usw.). Bei einigen Komponenten bleibt aber die CLSID z.B. über verschiedene Versionen hinweg gleich (!), zum Beispiel bei TX Text Control, wohingegen die ProgID (die man ja alternativ nutzen kann) mit der Versionsnummer wechselt. Für die Möglichkeit, dass ein Control auch von anderen Anwendungen genutzt wird - und sowas passiert! -, ist es m.E. deshalb zu empfehlen, immer die ProgID zu nutzen, um sicherzustellen, dass auch die richtige Version angefasst wird und man nicht versehentlich auf eine Fassung des Controls zugreift, die von einer anderen App mitgeliefert wurde.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: CLSID vs. ProgID

Beitrag von AUGE_OHR »

hi,
Hubert hat geschrieben: WMPlayer.OCX.7 -> versionsabhängig, und
WMPlayer.OCX -> das sollte versionsunabhängig sein.
Das letzte nennt man "VersionIndependentProgID" womit ich nicht arbeite.
Es gab einen Grund warum man das nicht verwenden sollte, aber ich komme z.Z. nicht drauf.
Tom hat geschrieben: Demoversionen haben andere CLSIDs als Vollversionen
sorry aber das ist falsch, der Unterschied liegt alleine in der Runtime Licence.
eine CLSID dafür "verschwendet" keiner (den die kostet Geld wenn du die bei M$ registrieren lässt )
Tom hat geschrieben:...Bei einigen Komponenten bleibt aber die CLSID z.B. über verschiedene Versionen hinweg gleich (!), zum Beispiel bei TX Text Control, wohingegen die ProgID (die man ja alternativ nutzen kann) mit der Versionsnummer wechselt. Für die Möglichkeit, dass ein Control auch von anderen Anwendungen genutzt wird - und sowas passiert! -, ist es m.E. deshalb zu empfehlen, immer die ProgID zu nutzen, um sicherzustellen, dass auch die richtige Version angefasst wird und man nicht versehentlich auf eine Fassung des Controls zugreift, die von einer anderen App mitgeliefert wurde.
genau eben nicht ! Ein Gutes Programm "merkt" anhand der CLSID wenn es ein Update gab und
"leitet" ggf. weiter sodas bei einer CLSID immer die "latest" Version benutzt wird.

weiteres Beispiel : Acrobat Reader Sample Alaska
Da ist noch die "uralte" CLSID drin, aber wenn man v8 / v9 richtig "geupdatet" hat dann läuft
das Sample noch immer mit der selben CLSID aber schon die v6 lief nicht mit ProgID.

Genau das ist ja der Grund warum ich diesen Thread angefangen haben weil es scheinbar viele
nicht wissen und nicht alle haben schon "hunderte" von activeX ausprobiert.
gruss by OHR
Jimmy
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Re: CLSID vs. ProgID

Beitrag von Lewi »

Die ProgId ist so etwas wie der Alias-Bezeichner in Form einer Zeichenkette einer CLSID. Die OS-COM-Bibliothek (auch COM-API genannt, zur Verfügung gestellt von der OLE32.DLL) löst die ProgId mittels eines internen Aufrufes in eine CLSID um.

Wie aus Jimmys Anmerkungen hervor geht, sind CLSID (welweit) eindeutig, für ProgId´s gilt dies nicht. Im Grunde kann der Entwickler einer ActiveX-Komponete die ProgId willkürlich wählen und z.B. die gleichen Namen wählen, wie bereits bekannte ProgId´s.
Antworten