Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hat da jemand Erfahrungen mit?

Ich hab ein ActiveX Steuerelemt das sich irgendwie nicht unter Windows Vista registrieren lässt bzw. das dort nicht genutz werden kann.

Um den Fehler einzugrenzen wollte ich das mal Debuggen und hab erstmal Visual C++ 6 installiert (weil ich das damit erstellt habe). Während der Installation kam aber ein Fehler das eine Dll nicht registriert werden konnte und wenn ich das OCX debuggen will springt er auch nicht am Haltepunkt in den Debugger.

Daraufhin hab ich dann Visual Studio 2005 installiert, aber hier hab ich das selbe Problem das er am Haltepunkt nicht in den Debugger springt sondern ganz normal weitermacht als wäre kein Debugger da :confused:

Geschrieben

Hmm komischerweise zeigt mir Depends zu dem OCX ein Rotes Feld bei der MSVCRT.dll an. Die liegt aber im Programmverzeichnis und ist die selbe wie auf meinen Nicht-Vista Rechnern wo es funktioniert.

Bei der einzigsten Dll von der MSVCRT abhängig ist, der Kernel32.dll, wird aber nichts rot angezeigt.

Komischerweise kann ich das OCX auch nicht im Testcontainer für ActiveX Steuerelemente finden obwohl Visual C++ 6 sagt das es erfolgreich registriert wurde.

Geschrieben

Ich hab mal die Registryeinträge zu dem OCX zwischen meinem XP und meinem Vista PC Verglichen und die scheinen identisch zu sein. Trotzdem wird es unter Vista nicht bei den Registrierten Steuerelementen aufgeführt. Hab mir dazu auch extra nochmal ein Programm bei Codeguru runtergeladen...

Geschrieben

Also ich verstehs nicht :(. Das Debuggen hab ich mittlerweile hinbekommen, war ein blöder Fehler meinerseits. Aber dadurch lässt sich auch kein Fehler feststellen. In der DllRegisterServer Funktion meines OCX scheint alles zu funktionieren und die Registryeinträge sind wie gesagt auch da. Trotzdem wird das Steuerelement nicht bei den registrierten aufgeführt.

Hab auch mal ein anderes von Codeguru runtergeladen und damit klappt es, aber dessen DllRegisterServer Funktion macht das Selbe wie meine...

Geschrieben

Ok hab das Problem gerade gefunden aber noch keine Lösung dafür.

Meine DllRegisterServer sieht normalerweise so aus:


STDAPI DllRegisterServer(void)
{
HKEY hKeyCurrentUser;
HMODULE hLib;
TRegOverridePredefKey pRegOverridePredefKey;

hLib = LoadLibrary("Advapi32.dll");


if (hLib)
{
pRegOverridePredefKey = (TRegOverridePredefKey) GetProcAddress(hLib,"RegOverridePredefKey");
if (pRegOverridePredefKey)
{
RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Classes"), 0, KEY_ALL_ACCESS, &hKeyCurrentUser);
pRegOverridePredefKey(HKEY_CLASSES_ROOT, hKeyCurrentUser);
RegCloseKey(hKeyCurrentUser);
}
FreeLibrary(hLib);
}


AFX_MANAGE_STATE(_afxModuleAddrThis);

if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);

if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
return ResultFromScode(SELFREG_E_CLASS);

return NOERROR;
}
[/PHP]

Den Part mit Advapi32.dll sowie den if Block dazu hatte ich aber dann für den Vergleich mit dem anderen OCX auskommentiert, deshalb hab ich oben geschrieben das die identisch sind.

Wenn ich den Block auskommentiert lasse und mein OCX per regsvr32 unregistriere und danch wieder registriere dann funktioniert es und das OCX wird gefunden.

Sobald ich den Block aber wieder rein mache funktioniert es nicht mehr. Das der Testcontainer das nicht findet ist ja dann eigentlich klar weil der ja weiterhin unter HKCR in der Registry guckt, das hatte ich leider nicht bedacht beim Testen, aber meine Anwendung ruft direkt die DllRegisterServer Funktion aus dem OCX auf und wird somit ja durch den Aufruf von RegOverridePredefKey mit umgelenkt und sollte das OCX deshalb finden. Unter anderen Betriebssystemen funktioniert das auch nur hier irgendwie nicht.

Geschrieben

Ja bin als Admin angemeldet und die Einträge werden auch in der Registry erstellt und durch meine Änderung in DllRegisterServer ja auch nicht in einem besonders geschütztem Bereich sundern unter HKCU. Hab jetzt mal die Vista Beta runtergeschmissen weil ich eben eine Release Version von Vista bekommen habe aber damit hab ich das selbe Problem.

Mir kommt es so vor das der Prozess trotz RegOverridePredefKey später an der falschen Stelle in der Registry sucht, aber in der MSDN steht nichts davon das sich diese Funktion unter Vista anders verhält...

Geschrieben
Schalte UAC mal versuchsweise aus.

Hat leider nichts bewirkt

Wenn das nicht hilft, müsstest Du sagen, wo genau Dein Programm aussteigt.

Also mein Programm ist ein Cobol Programm. Weil ich mit den dortigen Steuerelemeten nicht das machen konnte was ich brauchte habe ich mit C++ ein ActiveX Steuerelement entwickelt was in dem entsprechendem Programmteil eingebunden wird.

Bevor dieses Programm mit dem ActiveX drin jetzt aufgerufen wird, wird die DllRegisterServer aus dem OCX die ich oben gepostet habe aufgerufen damit das OCX registriert wird (dies ist aus verschiedenen Gründen notwendig). Damit man dazu nicht unbedingt Adminsitrator sein muss wird vor der Registrierung der Registryschlüssel von HKCR nach HKCU für diesen Prozess umgeändert.

Wenn die Registrierung geklappt hat wird das Programm das das OCX verwendet aufgerufen und da bekomme ich dann den Fehler das das Steuerelement nicht erstellt werden konnte (genauso wie wenn es nicht registriert ist).

Es ist aber registriert, nur nicht an der Standardstelle unter HKEY_CLASSES_ROOT sondern unter HKEY_CURRENT_USER wo die Anwendung eigentlich suchen müsste (und unter anderen Windowsversionen auch macht). Lasse ich den Teil in DllRegisterServer weg wo ich HKCR umhänge funktioniert es, also scheint es hier einen Unterschied bei Vista zu geben.

Geschrieben

Also zusammengefasst: Das Control lässt sich normal mit regsvr32 registrieren (ohne Umbiegen der Registry) und verwenden. Mit Umbiegen der Registry läuft die Registrierungsfunktion durch, aber das Programm kann das Control nicht verwenden?

Warum führst Du keine normale Registrierung bei der Installation durch?

Geschrieben

Während der Installation geht nicht weil die Anwendung auf einem PC installiert wird und dann im Netzwerk freigegeben werden kann damit man sie von anderen PCs im Netzwerk aus starten kann (ist nicht schön, ist aber leider so). Deshalb wäre es ja dann nur auf dem PC registriert auf dem es installiert wurde und auf allen anderen nicht, deswegen muss das OCX immer vor dem Aufruf des Programm registriert werden.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...