Comment résoudre COM Exception de la Classe non enregistrée (Exception de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))?
Lorsque j'essaie de créer une instance d'une classe COM il déclenche une exception comme
Classe non enregistrée (Exception de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
Veuillez indiquer comment pourrais-je le résoudre?
- Pouvez-vous donner plus de détails avec un peu de code?
- Il y a deux questions: 1.Avez-vous l'installer / enregistrer le composant COM sur Windows 7 x64 machine? 2.Quelle est la cible de la plateforme de votre demande, je pense que vous devriez mettre la plate-forme x86, s'il vous plaît ne pas le définir comme "any CPU"? Veuillez vous inscrire le COM d'abord, puis exécuter pour tester l'application, veuillez consulter le document: support.microsoft.com/kb/146219 et à l'Explication des Regsvr32 d'utilisation et les messages d'erreur
- J'ai résolu sans changer la cible de génération de 'x86'. Solution dans le lien : <stackoverflow.com/a/55513690/11310933>
Vous devez vous connecter pour publier un commentaire.
Il ressemble selon le programme ou le processus que vous essayez d'initialiser soit n'est pas installé sur votre machine, a une installation endommagée ou doit être enregistré.
Soit l'installer, réparer (via Ajout/suppression de Programmes) ou enregistrer (via Regsvr32.exe).
Vous n'avez pas fourni assez d'informations pour nous permettre de vous aider plus que cela.
Vous avez besoin pour vous assurer que tous vos assemblages sont la compilation de la bonne architecture. Essayez de changer l'architecture x86 si vous réinstallez le composant COM ne fonctionne pas.
Mon problème et de la solution
J'ai un 32 bits tiers dll que j'ai installé en 2008 R2 machine 64 bits.
J'ai un service wcf créé en .net 4.5 cadre qui appelle les 32 bits de tiers dll pour le processus. Maintenant, j'ai bien mis à la cible " any cpu et déployé à l'ordinateur 64 bits.
quand j'ai essayé d'appeler le service wcf a reçu l'erreur "80040154 Classe non enregistrée (Exception de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG"
Maintenant que j'ai utilisé ProcMon.exe la trace de la com numéro de registre et ont constaté que le processus est à la recherche de l'entrée de registre à HKLM\CLSID et HKCR\CLSID où il n'y a pas d'entrée.
Est venu de savoir que Microsoft ne va pas inscrire les 32 bits de composants com pour les chemins HKLM\CLSID, HKCR\CLSID en 64 bits machine plutôt l'entrée dans HKLM\Wow6432Node\CLSID et HKCR\Wow6432Node\CLSID chemins.
Maintenant que le conflit est en 64 bits processus d'essayer d'invoquer processus 32 bits en 64 bits machine qui va chercher l'entrée de registre HKLM\CLSID, HKCR\CLSID. La solution est de forcer le 64 bits processus de regarder l'entrée de registre à HKLM\Wow6432Node\CLSID et HKCR\Wow6432Node\CLSID.
Ceci peut être réalisé par la configuration du service wcf les propriétés du projet pour cible à 'X86' de la machine au lieu de "Toute".
Après le déploiement de la 'X86' version 2008 R2 serveur eu la question "le Système de.BadImageFormatException: impossible de charger le fichier ou l'assembly"
Solution à ce badimageformatexception est le réglage de la 'Enable32bitApplications' à 'True' dans IIS Apppool propriétés pour le droit du pool d'applications.
Également de noter que la classe de contexte lors de l'initialisation pouvez créer une exception à la règle. Si vous avez un objet qui est codé comme INPROC_SERVER mais vous essayez de CoCreateInstance comme CLSCTX_LOCAL_SERVER, vous pourrez également obtenir cette erreur.
Vous devez vous assurer que l'objet est enregistré et le CoCreateInstance est la création d'une instance avec la bonne classe.
DesktopWallpaper
à l'aide deCLSCTX_INPROC
(au lieu deCLSCTX_ALL
), vous obtiendrez la0x80040154 (REGDB_E_CLASSNOTREG)
erreur.Si vous utilisez la version 64 bits de composants COM dans une application web sur IIS, assurez-vous que le pool d'applications est configuré pour ne pas autoriser les applications 32 bits (Activer les Applications 32 Bits: faux dans les paramètres avancés)
Je l'ai eu à travailler en Permettant à des applications 32 bits dans le Pool d'Applications paramètres avancés. Cliquez du bouton droit sur le pool d'applications et sélectionnez paramètres avancés - activer les applications 32 bits.
Cela peut aider quelqu'un là-bas.
Par l'inscription de la classe (en particulier de son CLSID) -- voir, par exemple,ici.
dans mon cas
my platform
est x64the Dll library(sdk)
et laredistributable package
est x64donc
dans l'explorateur de solutions
navigate to your project
ouvrir
Properties
change the Platform target from AnyCPU to x64
La façon que j'ai résolu ce problème a été d'inscrire le
COM
viaregsvr32
.de s'assurer que le COM vous appelez est enregistré.
Ma demande a été à l'aide de
xceedcry.dll
et je n'étais pas de l'enregistrement. Une fois que j'ai enregistré, l'application a bien fonctionné.Pour moi, j'ai dû créer 64 bits de configuration de la compilation.
Ma solution a été de changer le "Activer les Applications 32 Bits" pour de Vrai dans les paramètres avancés de l'application relatif piscine dans IIS.
J'ai eu le même problème à l'aide de MapWinGis.
J'ai trouvé la solution, en travaillant sur visual studio 2015 windows forms proyect, juste à droite, cliquez sur le proyect-> propriétés-> Build, configuration de l'ensemble de Toutes les configurations et dans le conbobox "plate-forme cible" ensemble pour x64.
Je suis tombé sur cette question de l'appel d'une .Net de l'assemblée à partir d'un C++ client via COM. Il s'avère que l'une des assemblées .Net de l'assemblée dépendait pas pu être trouvé. J'ai lutté pendant un certain temps à essayer de comprendre ce qui n'allait pas avec la 1ère assemblée, mais c'était en fait l'un des 1er de l'assemblée des dépendances. J'ai reçu deux erreurs lors de l'appel de CoCreateInstance() du C++ client. La première était:
REGDB_E_CLASSNOTREG Classe non enregistrée
Et le deuxième essai a été:
0x80131040 : L'assemblée manifeste définition ne correspond pas à la référence d'assembly.
Afin de vérifier que votre assemblée références sont présentes.
J'ai découvert cela en parcourant la 1ère assemblée avec dotPeek et de remarquer l'un de ses références manquantes. Placer la version correcte de la dépendance dans le dossier résolu les deux erreurs.
J'ai été de compiler mon application ciblage CPU et le principal problème est que adobe reader a été installé plus âgés v10.x doit de mise à niveau v11.x, c'est de cette façon que j'arrive à résoudre ce problème.
J'ai rencontré le même problème en utilisant une classe COM, c'est à dire de " Classe non enregistrée exception à l'exécution. Pour moi j'ai été en mesure de résoudre en allant à l'application.le fichier de configuration et de modifier le "démarrage" et "supportedRuntime' éléments à quelque chose comme:
Vous pouvez lire plus sur les détails ici http://stackoverflow.com/questions/1604663/
et ici https://msdn.microsoft.com/en-us/library/w4atty68(v=vs. 110).aspx
Je note je suis en cours d'exécution Visual Studio 2017.
Processeur cible = x86
Incorporer Interop Type = true (dans la fenêtre propriétés)
Dans mon cas, la classe a été correctement enregistré et construit en CPU /64 bits mode.
Mais la Activer les Applications 32 bits propriété de la pool d'Applications IIS de l'application qui utilise la classe a été définie pour Vrai.
Classe n'a pas été trouvé à cause de l'architecture de l'incompatibilité entre l'application de configuration du pool et de la véritable classe inscrite.
Réglage Activer les Applications 32 bits à Faux résolu le problème.
allez dans le répertoire de .Net framework et d'enregistrer leurs respectifs dll avec Regsvr32.exe espace blanc dll chemin.
Que j'ai rencontré le même problème. Après quelques recherches, j'ai trouvé fixer pour moi et il peut s'avérer utile. Le problème n'est pas seulement lié à la ré-installation de mon observation, il dépend des autorisations d'accès également.
Étape 1: Réparer l'objet COM particulier.
Étape 2: Services de Composants > Ordinateur > Mon Ordinateur > DCOM Config > Sélectionnez votre objet COM > clic Droit > Propriétés > onglet Sécurité > les Autorisations d'Accès > Choisissez Personnaliser > Cliquez sur MODIFIER > Sélectionnez IIS_USER (Si elle n'existe pas créer de droits) et de donner un accès complet et cliquez sur OK.
Déplacer à l'Identité tab > Vous pouvez sélectionner "utilisateur Interactif" ou "Cet utilisateur" > Cliquez sur Appliquer et OK. Si vous choisissez "Cet utilisateur", nous devons donner Administratif privilégié de l'utilisateur pour le serveur
Étape 3: Ouvrez le Gestionnaire des services IIS > Redémarrer l'Application des Piscines.
Remarque: Si nécessaire, s'il vous plaît redémarrer le serveur
Ici trouver la solution, exécuter la console mmc -32 outil (pas dcomcfg)
Sur système 64 bits à 32 bits d'Office essayez ceci: