Discussion:
ActiveX-Komponenten registrieren bzw. prüfen ob bereits registriert
(zu alt für eine Antwort)
Thomas Gahler
2005-05-25 06:08:24 UTC
Permalink
Hallo zusammen & guten Morgen

Habe da zwei Fragen zum Thema registrieren von Dateien

A.)
Gibt es eine einfache Möglichkeit per Code eine ActiveX-Komponente zu
registrieren? Oder muss ich dazu einen Shell-Aufruf auf RegSvr32.Exe machen
(was mir natürlich nicht ganz gefallen würde).

B.)
Gibt es eine einfache Möglichkeit zu prüfen, ob eine ActiveX-Komponente auf
dem System schon installiert und registriert ist? Oder muss ich mich da
manuell durch die Registry hangen und via CLSID usw. das Ganze zusammen
suchen.



Ich weiss ich könnte die Datei via Setup schön installieren usw. habe ich in
meinem Umfeld aber nicht.
Und nicht vergessen, das Ganze wird anschliessen in VBA oder WSH umgesetzt.

Besten Dank für jeden Tipp



--
Thomas Gahler
MVP für WordVBA

- Windows XP (SP1), Office XP (SP3)
Norbert Schiller
2005-05-25 07:08:03 UTC
Permalink
Morgen Thomas,

zu Frage 1 schau mal hier:

http://www.activevb.de/tipps/vb6tipps/tipp0242.html


--
Gruß, Norbert
[mailto:***@freenet.de]
Thorsten Doerfler
2005-05-25 07:55:53 UTC
Permalink
Post by Thomas Gahler
A.)
Gibt es eine einfache Möglichkeit per Code eine ActiveX-Komponente zu
registrieren? Oder muss ich dazu einen Shell-Aufruf auf RegSvr32.Exe machen
(was mir natürlich nicht ganz gefallen würde).
Was stört an der RegSvr32-Lösung? Wenn Du nach einer einfachen Lösung
suchst, hast Du diese schon mit diesem Tool gefunden. Mit dem Schalter
'/s ' kann man die Meldungen unterdrücken.
Post by Thomas Gahler
B.)
Gibt es eine einfache Möglichkeit zu prüfen, ob eine ActiveX-Komponente auf
dem System schon installiert und registriert ist? Oder muss ich mich da
manuell durch die Registry hangen und via CLSID usw. das Ganze zusammen
suchen.
Mehrere Möglichkeiten sind da gegeben.

' -- Deklaration --
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type

Private Declare Function CLSIDFromProgID Lib "ole32.dll" ( _
ByVal ProgID As Long, _
ByRef rclsid As GUID _
) As Long

Public Function ObjectExists(ByVal Class As String) As Boolean
Dim lGUID As GUID

If CLSIDFromProgID(StrPtr(Class), lGUID) = 0 Then
ObjectExists = True
End If
End Function

' Anwendung:
Debug.Print ObjectExists("Project1.Class1")
' ---

Diese Prüfung testet wirklich nur, ob der angegebene Eintrag vorhanden
ist. Aufschluss darüber, ob die Komponente auch fehlerfrei instanziert
werden kann, gibt sie Dir nicht.

Desweiteren bietet sich hier die "Typelib Information" Bibliothek
[tlbinf32.dll](Projekt => Verweise) an:

Dim lTLI As TypeLibInfo

On Error Resume Next
Set lTLI = TLI.TypeLibInfoFromRegistry( _
"{00025E01-0000-0000-C000-000000000046}", 4, 0, 0)

Select Case Err.Number
Case 0
Debug.Print lTLI.HelpString

Case tliErrTypeLibNotRegistered
MsgBox "Der angegebene Verweis ist nicht registriert.", vbCritical

Case Else
MsgBox Err.Description
End Select

Die TlbInf32.dll darf zwar frei verteilt werden, allerdings ist sie
nicht standardmäßig auf einem Rechner installiert, so dass Du Dich mit
dieser Lösung wohl eher im Kreis drehen würdest.

Folgendes Tool und sein Quellcode, könnte für Dich ebenso interessant
sein:
VB Type Library Registration Utility
Register, Unregister and Manage Type Libraries on your system
http://www.vbaccelerator.com/home/VB/Utilities/Type_Library_Registration_Utility/article.asp
Post by Thomas Gahler
Ich weiss ich könnte die Datei via Setup schön installieren usw. habe ich in
meinem Umfeld aber nicht.
Und nicht vergessen, das Ganze wird anschliessen in VBA oder WSH umgesetzt.
Hmm.. wenn Du jetzt wenigstens sagst, dass Du die ActiveX-Komponenten
mit VB entwickelst, dann kommst Du aus der Geschichte hier nochmal
heil raus. Ansonsten muss ich zur groben Kelle greifen und Dich darauf
hinweisen, dass es für die genannten Umgebungen eigene Groups gibt.
Aber das sollte wohl bekannt sein.

Thorsten Dörfler
--
vb-hellfire - einfach anders
http://www.vb-hellfire.de/
Thomas Gahler
2005-05-25 14:35:41 UTC
Permalink
Hallo Thorsten
Post by Thorsten Doerfler
Was stört an der RegSvr32-Lösung?
Ein Shell-Aufruf ist für mich keine saubere Programmierung (persönliche
Meinung).
Aber einfach ist es natürlich schon.
Post by Thorsten Doerfler
Post by Thomas Gahler
Gibt es eine einfache Möglichkeit zu prüfen, ob eine ActiveX-Komponente auf
Mehrere Möglichkeiten sind da gegeben.
Danke für die Tips
Post by Thorsten Doerfler
Post by Thomas Gahler
Und nicht vergessen, das Ganze wird anschliessen in VBA oder WSH umgesetzt.
Hmm.. wenn Du jetzt wenigstens sagst, dass Du die ActiveX-Komponenten
mit VB entwickelst,
Ne, die habe ich gekauft.
Post by Thorsten Doerfler
Ansonsten muss ich zur groben Kelle greifen und Dich darauf
hinweisen, dass es für die genannten Umgebungen eigene Groups gibt.
Aber das sollte wohl bekannt sein.
Jaja, das stimmt schon, doch in der VBA NG geht es um die Steuerung der
Applikation und diese ist meiner Ansicht nach ein Problemchen das ausserhalb
der Applikation liegt, deshalb die Frage an die richtigen Programmierer.
Vielleicht hätte ich bei WSH NG auch Erfolg gehabt, doch hier weiss ich dass
viele gute Leute anwesend sind.
So hoffe ich, dass ich nicht allzu weit daneben lag. helfe dafür mal gerne
bei einem Wordproblem.




--
Thomas Gahler
MVP für WordVBA

- Windows XP (SP1), Office XP (SP3)
Andreas Born
2005-05-25 14:49:59 UTC
Permalink
Hallo Thomas,
Post by Thomas Gahler
Post by Thorsten Doerfler
Was stört an der RegSvr32-Lösung?
Ein Shell-Aufruf ist für mich keine saubere Programmierung
(persönliche Meinung).
Du startest einen Prozess, der eine bestimmte Aufgabe erledigt. Was soll
daran unsauber sein?

Im Gegenteil, warum sollte der programmcode, der ja nur einmal für die
Installation benötigt wird, permanent im Speicher mit herumgeschleppt
werden? ;-)


Viele Grüße,
Andreas
Thomas Gahler
2005-05-26 05:50:18 UTC
Permalink
Hallo Andreas
Post by Andreas Born
Post by Thomas Gahler
Ein Shell-Aufruf ist für mich keine saubere Programmierung
(persönliche Meinung).
Du startest einen Prozess, der eine bestimmte Aufgabe erledigt. Was soll
daran unsauber sein?
Im Gegenteil, warum sollte der programmcode, der ja nur einmal für die
Installation benötigt wird, permanent im Speicher mit herumgeschleppt
werden? ;-)
In diesem Fall hat es was und werd ich wol auch so implemnetieren.

Ich habe da eher an so Fragen gedacht wie sie auch schon aufgetaucht sind.
So nach dem Motto «...ich habe ein Programm, das ruft Word auf (via Shell),
Word startet dann automisch ein Makro, wann weiss ich wann das Makro fertig
ist, damit ich mit dem Programm am weiterarbeiten kann...»



--
Thomas Gahler
MVP für WordVBA

- Windows XP (SP1), Office XP (SP3)
Thorsten Doerfler
2005-05-26 09:44:47 UTC
Permalink
Post by Thomas Gahler
Post by Thorsten Doerfler
Was stört an der RegSvr32-Lösung?
Ein Shell-Aufruf ist für mich keine saubere Programmierung (persönliche
Meinung).
Aber einfach ist es natürlich schon.
Stimmt, ein synchroner Shell-Aufruf mit Auswertung des Exit-Code ist
eleganter. :-)

Als einfach hätte ich Dir auch noch die Funktion "DLLSelfRegister" aus
der "vb6stkit.dll" anbieten können. Diese wirst Du aber auf einem
Rechner ohne VB-IDE bzw. ohne VB6 Anwendung eher selten, bis gar nicht
antreffen. :-)
Post by Thomas Gahler
Post by Thorsten Doerfler
Ansonsten muss ich zur groben Kelle greifen und Dich darauf
hinweisen, dass es für die genannten Umgebungen eigene Groups gibt.
Aber das sollte wohl bekannt sein.
Jaja, das stimmt schon, doch in der VBA NG geht es um die Steuerung der
Applikation und diese ist meiner Ansicht nach ein Problemchen das ausserhalb
der Applikation liegt, deshalb die Frage an die richtigen Programmierer.
Das Problem ist halt nur, dass "richtige Programmierer" im Fall VB vs.
VBA meist ganz andere Mittel zur Verfügung stehen haben, als Word und
umgekehrt. Beim WSH ist es ganz vorbei, denn hier können keine API
Funktionen genutzt werden. Daher ist es meist besser direkt in der
word.vba Gruppe zu fragen bzw. in der Scripting Gruppe.

Du sagst ja wenigstens noch direkt, dass Du eine VBA Lösung suchst.
Wie oft haben hier schon Leute gefragt, ohne das anzugeben. Man gibt
eine Lösung für VB und führt danach einen langen "funktioniert
nicht"-Thread, bis sich dann mal herausstellt, dass der Fragende eine
Lösung für VBA Forms sucht.

Thorsten Dörfler
--
vb-hellfire - einfach anders
http://www.vb-hellfire.de/
Thomas Gahler
2005-05-26 12:07:38 UTC
Permalink
Hallo Thorsten
Post by Thorsten Doerfler
der "vb6stkit.dll" anbieten können. Diese wirst Du aber auf einem
Rechner ohne VB-IDE bzw. ohne VB6 Anwendung eher selten, bis gar nicht
antreffen. :-)
Stimmt, die habe ich auch schon für was anderes gesucht.
Post by Thorsten Doerfler
Das Problem ist halt nur, dass "richtige Programmierer" im Fall VB vs.
VBA meist ganz andere Mittel zur Verfügung stehen haben, als Word und
umgekehrt.
Ich weiss und darum bettle ich nach APIs und ähnlichem
Post by Thorsten Doerfler
Daher ist es meist besser direkt in der word.vba Gruppe zu fragen
Da müsst ich mir ja die Frage selbst beantworten ;-)
Post by Thorsten Doerfler
Du sagst ja wenigstens noch direkt, dass Du eine VBA Lösung suchst.
Wie oft haben hier schon Leute gefragt, ohne das anzugeben [...]
Werde mir Mühe geben dies auch in Zukunft zu tun und hoffe darauf, dass ich
noch vor dem stellen der Frage abschätzen kann ob sich eine mögliche Antwort
dann auch nach VBA portieren lässt.



--
Thomas Gahler
MVP für WordVBA

- Windows XP (SP1), Office XP (SP3)

Andreas Born
2005-05-25 13:17:26 UTC
Permalink
Hallo Thomas,
Post by Thomas Gahler
A.)
Gibt es eine einfache Möglichkeit per Code eine ActiveX-Komponente zu
registrieren? Oder muss ich dazu einen Shell-Aufruf auf RegSvr32.Exe
machen (was mir natürlich nicht ganz gefallen würde).
RegSvr32 ist die einfachste und sauberste Variante.
Um eine ActiveX-Exe zu registrieren ruft man sie mit dem Schalter
/regserver auf. (Der Aufruf kehrt sofort nach der Registrierung zurück)
Post by Thomas Gahler
B.)
Gibt es eine einfache Möglichkeit zu prüfen, ob eine
ActiveX-Komponente auf dem System schon installiert und registriert
ist? Oder muss ich mich da manuell durch die Registry hangen und via
CLSID usw. das Ganze zusammen suchen.
Du kannst versuchen, die Komponente zu erstellen. :-) Zudem kann man
eigene Komponenten mit einer 'info'-Klasse ausstatten, die dann z.B.
die Versionsnummer(n) zurückliefert. So kann man sehen, ob auch
die richtige Version registriert ist.
Post by Thomas Gahler
Ich weiss ich könnte die Datei via Setup schön installieren usw. habe
ich in meinem Umfeld aber nicht.
Man kann auch auf ActiveX-Komponenten zugreifen, wenn diese nicht
registriert sind. Das ist in dieser NG schon desöfteren diskutiert
worden. Olaf Schmidt hatte hierzu mal entsprechenden Code gepostet.


Viele Grüße,
Andreas
Loading...