Il y a deux questions: 1. Avez-vous installé / enregistré le composant COM sur la machine Windows 7 x64? 2. Quelle est la plate-forme cible de votre application, je pense que vous devriez définir la plate-forme sur x86, veuillez ne pas la définir comme "Any CPU"? Veuillez d'abord enregistrer le COM, puis exécuter pour tester l'application, veuillez vous référer au document: support.microsoft.com/kb/146219 et Explication de l'utilisation de Regsvr32 et des messages d'erreur
Il semble que le programme ou le processus que vous essayez d'initialiser n'est pas installé sur votre ordinateur, a une installation endommagée ou doit être enregistré.
Installez-le, réparez-le (via Ajout / Suppression de programmes) ou enregistrez-le (via Regsvr32.exe).
Vous ne nous avez pas fourni suffisamment d'informations pour vous aider plus que cela.
Je pense que vous vouliez dire RegSvr32.exe (par opposition à RegSrv32.exe).
windowsgm
60
Vous devez vous assurer que tous vos assemblys sont compilés pour la bonne architecture. Essayez de changer l'architecture pour x86 si la réinstallation du composant COM ne fonctionne pas.
Cela a résolu mon processus ne trouvant pas le client NAV 2009 R2 (ClassID 50000004-0000-1000-0001-0000836BD2D2).
Vincent Vancalbergh
14
Mon problème et la solution
J'ai une dll tierce 32 bits que j'ai installée dans la machine 2008 R2 qui est 64 bits.
J'ai un service wcf créé dans le cadre .net 4.5 qui appelle la dll tierce 32 bits pour le processus. Maintenant, j'ai défini la propriété de construction pour cibler «n'importe quel» processeur et je l'ai déployé sur la machine 64 bits.
lorsque j'ai essayé d'appeler le service wcf, j'ai obtenu l'erreur "80040154 Classe non enregistrée (Exception de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG"
Maintenant, j'ai utilisé ProcMon.exe pour tracer le problème de registre com et identifié que le processus recherche l'entrée de registre à HKLM \ CLSID et HKCR \ CLSID où il n'y a pas d'entrée.
Je suis venu pour savoir que Microsoft n'enregistrera pas les composants com 32 bits dans les chemins HKLM \ CLSID, HKCR \ CLSID dans la machine 64 bits plutôt qu'il place l'entrée dans les chemins HKLM \ Wow6432Node \ CLSID et HKCR \ Wow6432Node \ CLSID.
Maintenant, le conflit est un processus 64 bits essayant d'appeler un processus 32 bits dans une machine 64 bits qui recherchera l'entrée de registre dans HKLM \ CLSID, HKCR \ CLSID. La solution est que nous devons forcer le processus 64 bits à regarder l'entrée de registre dans HKLM \ Wow6432Node \ CLSID et HKCR \ Wow6432Node \ CLSID.
Ceci peut être réalisé en configurant les propriétés du projet de service wcf pour cibler la machine «X86» au lieu de «Tout».
Après le déploiement de la version 'X86' sur le serveur 2008 R2, le problème "System.BadImageFormatException: impossible de charger le fichier ou l'assembly"
La solution à cette mauvaiseimageformatexception consiste à définir «Enable32bitApplications» sur «True» dans les propriétés IIS Apppool pour le pool d'applications approprié.
Veuillez ne pas publier de réponses identiques à plusieurs questions. Publiez une bonne réponse, puis votez / marquez pour fermer les autres questions comme des doublons. Si la question n'est pas un doublon, adaptez vos réponses à la question .
kleopatra
10
Notez également que le contexte de classe lors de l'initialisation peut créer cette exception. Si vous avez un objet qui est codé comme INPROC_SERVER mais que vous essayez de CoCreateInstance comme CLSCTX_LOCAL_SERVER, vous obtiendrez également cette erreur.
Vous devez vous assurer que l'objet est enregistré et que CoCreateInstance crée une instance avec le contexte de classe correct.
Oui, si par exemple vous essayez de créer en DesktopWallpaperutilisant CLSCTX_INPROC(au lieu de CLSCTX_ALL) vous obtiendrez l' 0x80040154 (REGDB_E_CLASSNOTREG)erreur.
user362515
9
Si vous utilisez des composants COM 64 bits 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 fait fonctionner en activant les applications 32 bits dans les paramètres avancés du pool d'applications. Cliquez avec le bouton droit sur le pool d'applications et choisissez les paramètres avancés - activez les applications 32 bits. Cela peut aider quelqu'un là-bas.
Pareil pour moi. Une dll 32 bits utilisée sur une machine de développement 64 bits, un test 64 bits et un serveur live 64 bits. A bien fonctionné sur la boîte de développement. Lors du déploiement sur les serveurs de test et en direct, il a échoué jusqu'à ce que les applications 32 bits soient autorisées dans les pools d'applications IIS respectifs et que les pools aient redémarré. J'ai également dû désactiver "Embed Interop Types" (un paramètre sur la DLL incriminée dans VS) et définir "Copy Local" = true pour m'assurer que la DLL était effectivement copiée dans sa forme originale sur les serveurs.
cymorg
3
En enregistrant la classe (en particulier son CLSID) - voir par exemple ici .
Dans mon cas, la classe a été correctement enregistrée et intégrée à N'IMPORTE QUEL CPU / 64 bits .
Mais la propriété Activer les applications 32 bits du pool d'applications IIS de l'application qui utilise la classe a été définie sur True .
La classe n'a pas été trouvée en raison de l'incompatibilité d'architecture entre la configuration du pool d'applications et la classe enregistrée réelle.
Définir Activer les applications 32 bits sur False a résolu le problème.
J'ai eu le même problème avec MapWinGis. J'ai trouvé la solution, en travaillant sur le projet de formulaires Windows de Visual Studio 2015, il suffit de faire un clic droit sur le projet-> propriétés-> Construire, définir la configuration sur Toutes les configurations et dans la conbobox "cible de la plate-forme", réglez-la sur x64.
J'ai rencontré ce problème en appelant un assembly .Net à partir d'un client C ++ via COM. Il s'avère que l'un des assemblys dont dépendait l'assembly .Net est introuvable. J'ai lutté pendant un moment pour essayer de comprendre ce qui n'allait pas avec la 1ère assemblée, mais c'était en fait l'une des dépendances de la 1ère assemblée. J'ai reçu deux erreurs différentes lors de l'appel de CoCreateInstance () à partir du client C ++. Le premier était:
REGDB_E_CLASSNOTREG Classe non enregistrée
Et le deuxième essai était:
0x80131040: La définition de manifeste de l'assembly localisé ne correspond pas à la référence d'assembly.
Vérifiez donc que les références de votre assemblage sont présentes. J'ai découvert cela en parcourant le 1er assemblage avec dotPeek et en remarquant qu'une de ses références manquait. Le placement de la version correcte de la dépendance dans le dossier a résolu les deux erreurs.
Je compilais mon application ciblant n'importe quel processeur et le problème principal s'est avéré que Adobe Reader a été installé.L'ancien v10.x a besoin de mettre à niveau v11.x , c'est ainsi que j'arrive à résoudre ce problème.
J'ai rencontré le même problème en utilisant une classe COM, c'est-à-dire «exception de classe non enregistrée» au moment de l'exécution. Pour moi, j'ai pu résoudre en accédant au fichier app.config et en changeant les éléments 'startup' et 'supportedRuntime' en quelque chose comme:
J'ai été confronté au même problème. Après avoir fait quelques recherches, j'ai trouvé un correctif pour moi et cela peut être utile. Le problème n'est pas seulement lié à la réinstallation de mon observation, il dépend également des autorisations d'accès.
Étape 1: Réparez l'objet COM particulier.
Étape 2: Services de composants> Ordinateurs> Poste de travail> DCOM Config> Sélectionnez votre objet COM> Clic droit> Propriétés> onglet Sécurité> Autorisations d'accès> Choisissez Personnaliser> Cliquez sur MODIFIER> Sélectionnez IIS_USER (s'il n'existe pas, créez avec des droits complets) et donnez complet accédez et cliquez sur OK.
Passer à l'onglet Identité> Vous pouvez sélectionner "Utilisateur interactif" ou "Cet utilisateur"> Cliquez sur Appliquer et OK. Si vous choisissez "Cet utilisateur", nous devons donner un utilisateur privilégié Administrateur à ce serveur
Étape 3: Ouvrez le Gestionnaire IIS> Redémarrez les pools d'applications.
Remarque: si nécessaire, veuillez redémarrer le serveur
Réponses:
Il semble que le programme ou le processus que vous essayez d'initialiser n'est pas installé sur votre ordinateur, a une installation endommagée ou doit être enregistré.
Installez-le, réparez-le (via Ajout / Suppression de programmes) ou enregistrez-le (via Regsvr32.exe).
Vous ne nous avez pas fourni suffisamment d'informations pour vous aider plus que cela.
la source
Vous devez vous assurer que tous vos assemblys sont compilés pour la bonne architecture. Essayez de changer l'architecture pour x86 si la réinstallation du composant COM ne fonctionne pas.
la source
Mon problème et la solution
J'ai une dll tierce 32 bits que j'ai installée dans la machine 2008 R2 qui est 64 bits.
J'ai un service wcf créé dans le cadre .net 4.5 qui appelle la dll tierce 32 bits pour le processus. Maintenant, j'ai défini la propriété de construction pour cibler «n'importe quel» processeur et je l'ai déployé sur la machine 64 bits.
lorsque j'ai essayé d'appeler le service wcf, j'ai obtenu l'erreur "80040154 Classe non enregistrée (Exception de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG"
Maintenant, j'ai utilisé ProcMon.exe pour tracer le problème de registre com et identifié que le processus recherche l'entrée de registre à HKLM \ CLSID et HKCR \ CLSID où il n'y a pas d'entrée.
Je suis venu pour savoir que Microsoft n'enregistrera pas les composants com 32 bits dans les chemins HKLM \ CLSID, HKCR \ CLSID dans la machine 64 bits plutôt qu'il place l'entrée dans les chemins HKLM \ Wow6432Node \ CLSID et HKCR \ Wow6432Node \ CLSID.
Maintenant, le conflit est un processus 64 bits essayant d'appeler un processus 32 bits dans une machine 64 bits qui recherchera l'entrée de registre dans HKLM \ CLSID, HKCR \ CLSID. La solution est que nous devons forcer le processus 64 bits à regarder l'entrée de registre dans HKLM \ Wow6432Node \ CLSID et HKCR \ Wow6432Node \ CLSID.
Ceci peut être réalisé en configurant les propriétés du projet de service wcf pour cibler la machine «X86» au lieu de «Tout».
Après le déploiement de la version 'X86' sur le serveur 2008 R2, le problème "System.BadImageFormatException: impossible de charger le fichier ou l'assembly"
La solution à cette mauvaiseimageformatexception consiste à définir «Enable32bitApplications» sur «True» dans les propriétés IIS Apppool pour le pool d'applications approprié.
la source
Notez également que le contexte de classe lors de l'initialisation peut créer cette exception. Si vous avez un objet qui est codé comme INPROC_SERVER mais que vous essayez de CoCreateInstance comme CLSCTX_LOCAL_SERVER, vous obtiendrez également cette erreur.
Vous devez vous assurer que l'objet est enregistré et que CoCreateInstance crée une instance avec le contexte de classe correct.
la source
DesktopWallpaper
utilisantCLSCTX_INPROC
(au lieu deCLSCTX_ALL
) vous obtiendrez l'0x80040154 (REGDB_E_CLASSNOTREG)
erreur.Si vous utilisez des composants COM 64 bits 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)
la source
Je l'ai fait fonctionner en activant les applications 32 bits dans les paramètres avancés du pool d'applications. Cliquez avec le bouton droit sur le pool d'applications et choisissez les paramètres avancés - activez les applications 32 bits. Cela peut aider quelqu'un là-bas.
la source
En enregistrant la classe (en particulier son CLSID) - voir par exemple ici .
la source
dans mon cas
my platform
est x64the Dll library(sdk)
et leredistributable package
est x64alors
dans l'explorateur de solutions
navigate to your project
ouvert
Properties
change the Platform target from AnyCPU to x64
la source
La façon dont j'ai résolu ce problème était d'enregistrer le
COM
viaregsvr32
.assurez-vous que le COM que vous appelez est enregistré.
Mon application l'utilisait
xceedcry.dll
et je ne l'enregistrais pas. Une fois que je l'ai enregistré, l'application a bien fonctionné.la source
Ma solution a été de changer le " Activer les applications 32 bits " sur True dans les paramètres avancés du pool d'applications relatif dans IIS.
la source
Dans mon cas, la classe a été correctement enregistrée et intégrée à N'IMPORTE QUEL CPU / 64 bits .
Mais la propriété Activer les applications 32 bits du pool d'applications IIS de l'application qui utilise la classe a été définie sur True .
La classe n'a pas été trouvée en raison de l'incompatibilité d'architecture entre la configuration du pool d'applications et la classe enregistrée réelle.
Définir Activer les applications 32 bits sur False a résolu le problème.
la source
Pour moi, j'ai dû créer une configuration de construction 64 bits.
la source
J'ai eu le même problème avec MapWinGis. J'ai trouvé la solution, en travaillant sur le projet de formulaires Windows de Visual Studio 2015, il suffit de faire un clic droit sur le projet-> propriétés-> Construire, définir la configuration sur Toutes les configurations et dans la conbobox "cible de la plate-forme", réglez-la sur x64.
la source
J'ai rencontré ce problème en appelant un assembly .Net à partir d'un client C ++ via COM. Il s'avère que l'un des assemblys dont dépendait l'assembly .Net est introuvable. J'ai lutté pendant un moment pour essayer de comprendre ce qui n'allait pas avec la 1ère assemblée, mais c'était en fait l'une des dépendances de la 1ère assemblée. J'ai reçu deux erreurs différentes lors de l'appel de CoCreateInstance () à partir du client C ++. Le premier était: REGDB_E_CLASSNOTREG Classe non enregistrée Et le deuxième essai était: 0x80131040: La définition de manifeste de l'assembly localisé ne correspond pas à la référence d'assembly.
Vérifiez donc que les références de votre assemblage sont présentes. J'ai découvert cela en parcourant le 1er assemblage avec dotPeek et en remarquant qu'une de ses références manquait. Le placement de la version correcte de la dépendance dans le dossier a résolu les deux erreurs.
la source
Je compilais mon application ciblant n'importe quel processeur et le problème principal s'est avéré que Adobe Reader a été installé.L'ancien v10.x a besoin de mettre à niveau v11.x , c'est ainsi que j'arrive à résoudre ce problème.
la source
J'ai rencontré le même problème en utilisant une classe COM, c'est-à-dire «exception de classe non enregistrée» au moment de l'exécution. Pour moi, j'ai pu résoudre en accédant au fichier app.config et en changeant les éléments 'startup' et 'supportedRuntime' en quelque chose comme:
Vous pouvez en savoir 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 dois noter que j'exécute Visual Studio 2017. Cible cpu = x86 Embed Interop Type = true (dans la fenêtre des propriétés)
la source
allez dans le répertoire de .Net Framework et enregistrez leur DLL respective avec le chemin de la DLL d'espace blanc Regsvr32.exe .
la source
J'ai été confronté au même problème. Après avoir fait quelques recherches, j'ai trouvé un correctif pour moi et cela peut être utile. Le problème n'est pas seulement lié à la réinstallation de mon observation, il dépend également des autorisations d'accès.
Étape 1: Réparez l'objet COM particulier.
Étape 2: Services de composants> Ordinateurs> Poste de travail> DCOM Config> Sélectionnez votre objet COM> Clic droit> Propriétés> onglet Sécurité> Autorisations d'accès> Choisissez Personnaliser> Cliquez sur MODIFIER> Sélectionnez IIS_USER (s'il n'existe pas, créez avec des droits complets) et donnez complet accédez et cliquez sur OK.
Passer à l'onglet Identité> Vous pouvez sélectionner "Utilisateur interactif" ou "Cet utilisateur"> Cliquez sur Appliquer et OK. Si vous choisissez "Cet utilisateur", nous devons donner un utilisateur privilégié Administrateur à ce serveur
Étape 3: Ouvrez le Gestionnaire IIS> Redémarrez les pools d'applications.
Remarque: si nécessaire, veuillez redémarrer le serveur
la source
Trouvez ici la solution, exécutez l'outil mmc -32 (pas dcomcfg)
Sur un système 64 bits avec Office 32 bits, essayez ceci:
la source