Verwendung von ActiveX

01/10/2007 - 08:48 von Thomas Kehl | Report spam
Hallo zusammen.
Ich hàtte eine Frage bzgl. Verwendung eines ActiveX mit C#. Ich bin bisher
immer davon ausgegangen, dass ich das ActiveX nicht zu registrieren habe,
wenn ich dieses in den Programmordner ablege. Nun ist es aber so, dass ich
bei Verwendung einer solchen ActiveX, die im Programmordner liegt, auf dem
Kunden-PC folgende Fehlermeldung erhalte:

System.Runtime.InteropServices.COMException (0x80040154): Die
COM-Klassenfactory für die Komponente mit CLSID
{2BF78C6C-FB88-4F6C-87AB-C6E7F4CE6575} konnte aufgrund des folgenden Fehlers
nicht abgerufen werden: 80040154.

Weiss jemand, was der Grund für diese Fehlermeldung sein kann? Liegt das mit
der Registrierung zusammen?
Gibt es irgendwo im Netz (bzw. hat jemand mehr Infos dazu) Artikel, wie mit
ActiveX bei Verwendung in C# umgegangen werden muss? Ich möchte vermeiden,
dass ich die Komponente auf jedem Rechner, auf dem meine Applikation
gestartet wird zuerst registriert werden muss (dann funktioniert nàmlich
meine Verteilung mittels Kopieren nicht mehr).

Vielen Dank für eure Hilfe!

Beste Grüsse, Thomas
 

Lesen sie die antworten

#1 Kerem Gümrükcü
01/10/2007 - 09:22 | Warnen spam
"Thomas Kehl" <t.kehl (at) heeb.com> schrieb im Newsbeitrag
news:
Hallo zusammen.
Ich hàtte eine Frage bzgl. Verwendung eines ActiveX mit C#. Ich bin bisher
immer davon ausgegangen, dass ich das ActiveX nicht zu registrieren habe,
wenn ich dieses in den Programmordner ablege. Nun ist es aber so, dass ich
bei Verwendung einer solchen ActiveX, die im Programmordner liegt, auf dem
Kunden-PC folgende Fehlermeldung erhalte:

System.Runtime.InteropServices.COMException (0x80040154): Die
COM-Klassenfactory für die Komponente mit CLSID
{2BF78C6C-FB88-4F6C-87AB-C6E7F4CE6575} konnte aufgrund des folgenden
Fehlers nicht abgerufen werden: 80040154.

Weiss jemand, was der Grund für diese Fehlermeldung sein kann? Liegt das
mit der Registrierung zusammen?
Gibt es irgendwo im Netz (bzw. hat jemand mehr Infos dazu) Artikel, wie
mit ActiveX bei Verwendung in C# umgegangen werden muss? Ich möchte
vermeiden, dass ich die Komponente auf jedem Rechner, auf dem meine
Applikation gestartet wird zuerst registriert werden muss (dann
funktioniert nàmlich meine Verteilung mittels Kopieren nicht mehr).

Vielen Dank für eure Hilfe!

Beste Grüsse, Thomas




Hallo Thomas,

wohl oder übel wirst Du die ActiveX Komponente registrieren müssen, da man
ActiveX Komponenten bis auf einige geringe ausnahmen definitiv registrieren
muss. Die Informationen für die Komponenten liegen in der Registry und das
ist
leider der Ort an dem nach den ActiveX Komponenten gesucht wird. Du hast
mehere
Möglichkeiten, nun zu einem copy&paste verteilen zu kommen. Zum einen kannst
Du die ActiveX Komponente in deine Assembly, oder in resourcen packen und
beim programmstart (nach überpfürung auf bereits installierte
AX-Steuerelemente!)
ggf. bei Bedarf installieren und dann deine applikation starten. Dazu kannst
Du eine
"Loader" Assembly schreiben, die erst sicherhstellt, das die komponenten
vorhanden
sind und dann erst deine "echte" assembly startet. Eine etwas weniger
bekannte, aber
dafür wirklich effektive methode ist, das du ein VB6 Programm schreibst, das
die
AX Steuerelemente mit früher bindung im programm benutzt und das alle AXS
(ActiveX
Steuerelemente/Komponenten) beim starten installiert. Wenn ich mich richtig
erinnere,
wird bei vb6 applikationen bei dem fall einer nicht vorhandenen oder
registrierten AXS
die AXS in dem gleichen verzeichnis wie die vb6 app gesucht und dann falls
gefunden
in der registry registriert. Wenn ich mich richtig erinnere! Das wàre eine
Super Methode,
das vorhandensein der AXS sicherzustellen. Fakt ist, das AXS auf jeden Fall
installiert
sein müssen und Informationen zu dem komponenten in der Registry vorhanden
sein müssen!
Die Fehlermeldung ist einfach ein zeichen dafür, dass das AXS nicht gefunden
werden konnte,
in diesem fall in der registry. Auf jeden Fall musst Du sicherstellen, das
deine AXS auf dem
Zielrechner vorhanden sind, bevor Du deine "echte" Assembly starten kannst,
sonst wirst
Du immer so Probleme bekommen. Du kanst das Vorhandensein der AXS mit Active
Scripting,
WSH, oder eigenen Programmen, Bat.Dateien, oder wie auch immer "im voraus"
überprüfen.
Die AXS musst du immer mit deiner Applikation mitliefern und dann bei bedarf
installieren.
Anders ist das "By-Design" nicht möglich!

Schritte:

1. Assembly und benötigte AXS alle in einem Ordner halten

2. Vor dem start der Assembly prüfen, ob die AXS in der
Registry vorhanden sind, oder ob eine instanz mit spàter bindung
erstellt werden kann. Wenn nicht, gehe davon aus, das die AXS
nicht vorhanden ist

3. Komopnente regsitrieren, mit regsvr32 "deine komponente.dll"
oder mit LoadLibrary und aufruf der DllRegister Funktionen.
Ich habe dazu mal ein Beispiel in J# geschrieben mit Test ActiveX
Dlls: http://www.codegod.de/WebAppCodeGod/DL_Tools.aspx
COMUnInstaller by Kerem Gümrükcü

4 Deine eigentliche Assembly starten

Das wars,...

Wenn Du willst, kann ich Dir eine ganz aktuelle Version von dem
COMUnInstaller schicken, die auch Batch Install und andere
Extras hat...


Beste Grüsse / Best regards / Votre bien devoue


Kerem Gümrükcü

Best Quote: "Ain't nobody a badass with a double dose
of rock salt...", Kill Bill Vol.2

Latest Open-Source Project: http://sourceforge.net/projects/checkdiskshell
Thats me at work: http://www.pro-it-education.de/staff/keremg/
Pro-IT Education http://www.pro-it-education.de/
Professional IT-Training and Consulting

"This reply is provided as is, without warranty express or implied."

Ähnliche fragen