J'ai développé un service Windows en utilisant C # .NET pour générer un rapport PDF. Pour générer un fichier PDF, j'utilise une DLL tierce. L'application s'exécute sur ma plate-forme Windows XP. Lorsque j'ai déployé le service dans la version 64 bits de Windows Server 2008 , j'ai eu cette erreur:
La récupération de la fabrique de classes COM pour le composant avec CLSID {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} a échoué en raison de l'erreur suivante: 80040154.
J'ai enregistré la DLL à l'aide de la commande regsvr32. J'ai pu voir ce CLSID dans le registre. Mais le problème persiste.
Quel pourrait être le problème?
Réponses:
Dans VS - propriétés du projet - dans l'onglet Build - target target = X86
la source
J'ai rencontré un problème très similaire.
J'avais besoin d'utiliser une ancienne DLL 32 bits dans une application Web en cours de développement sur une machine 64 bits. J'ai enregistré la DLL 32 bits dans le dossier windows \ sysWOW64 en utilisant la version de regsrv32 dans ce dossier.
Les appels à la DLL tierce ont fonctionné à partir de tests unitaires dans Visual Studio mais ont échoué à partir de l'application Web hébergée dans IIS sur la même machine avec l'erreur 80040154.
La modification du pool d'applications sur «Activer les applications 32 bits» a résolu le problème.
la source
Il semble que votre service ait été construit contre «Any CPU», vous causant des erreurs sur 64 bits lorsque vous utilisez des composants COM. Vous devez le construire pour
x86
.Le site Web fonctionne probablement comme un processus 32 bits, c'est pourquoi il peut utiliser le composant. La création de votre solution
x86
obligera votre service à s'exécuter en 32 bits.la source
.ocx file (c:\Windows\SysWow>RegSvr32 genX.ocx)
mais j'obtiens une erreur Le module n'a pas pu se charger. Assurez-vous que le binaire est stocké sur le chemin spécifié ou déboguez-le pour vérifier les problèmes avec le binaire ou les fichiers .DLL dépendants.Vous n'avez pas à configurer la cible de votre plateforme de propriétés de projet X86. Vous pouvez également configurer les options iis pour fonctionner avec x86 comme ça
la source
Si vous cherchez un moyen de faire fonctionner cela sans recompiler votre application Any CPU, voici une autre solution de contournement potentielle:
Je ne prends aucun crédit pour la solution, mais cela a fonctionné pour nous. Consultez le lien source pour plus d'informations et d'autres commentaires.
Source: https://techtalk.gfi.com/32bit-object-64bit-environment/
la source
Le problème est que le processus serveur est 64 bits et la bibliothèque est 32 bits et il essaie de créer le composant COM dans le même processus (serveur in-proc). Soit vous recompilez le serveur et le rendez 32 bits, soit vous laissez le serveur inchangé et vous désactivez le composant COM. La façon la plus simple de rendre un serveur COM hors processus consiste à créer une application COM + - Panneau de configuration -> Outils d'administration -> ComponentServices.
la source
An error occurred while processing the last operation. [Error code 00690075] The event log may contain additional troubleshooting information.
Je n'ai modifié aucun paramètre de compilation.
Définissez simplement "Activer l'application 32 bits = True" dans les paramètres avancés d'AppPool.
Ça a marché pour moi
la source
La solution pour Windows 2008 Server x64 est:
Cette procédure est valide, elle est correcte.
la source
J'ai eu le même problème, mais les autres réponses n'ont fourni qu'une partie de la solution.
La solution est double:
Retirez le 64 bits du registre.
ou
Enregistrez-le en 32 bits:
C:\Windows\SysWOW64\regsvr32 <file.dll>
L'enregistrer en 32 bits sans supprimer l'enregistrement 64 bits ne résout pas mon problème.
la source
Eu un problème connexe avec un correctif différent, mais similaire:
J'avais un projet de service Windows défini sur "Any-CPU" à l'aide d'une DLL 64 bits. Même message d'erreur. J'ai essayé tout un tas de choses, mais rien n'a fonctionné. Enfin, je suis entré dans Propriétés du projet -> Créer et j'ai remarqué que le projet avait coché "Préférer 32 bits". Décoché cela et plus d'erreur.
Je suppose que le service Windows attendait une DLL 32 bits et ne l'a pas trouvée.
la source
Pour passer à x86:
la source
Si vous exécutez un site Web, vous pouvez également essayer de définir votre pool d'applications pour désactiver les applications 32 bits (dans les paramètres avancés d'un pool).
la source
Dans mon cas personnel, le problème a été résolu en recherchant l'ID de classe dans le registre de Windows sur la machine du développeur (car le problème a été jeté sur un PC client). Cette action sera placée dans le composant COM à l'origine du problème: une bibliothèque x86 référencée dans mon projet .NET qui n'était pas enregistrée comme OCX / COM pour le programme d'installation ou la mise à jour.
Cordialement
la source
Pour toute personne utilisant VSTO, le problème pour moi était une référence manquante à l'
office
assemblage. Il apparaît également si vous essayez d'instancier manuellement certains objets VSTO.la source
J'ai constaté que mon problème était lié à l'enregistrement réel de la DLL.
Exécutez d'abord "Regedit.exe" à partir d'une invite CMD (j'ai élevé son niveau de sécurité à Administrateur, "juste au cas où") puis recherchez dans le Registre (en cliquant sur "Modifier / Rechercher" dans le menu RegEdit ou en appuyant sur Ctrl + F) pour le CLSID affiché dans le message d'erreur que vous avez reçu concernant l'usine de classe COM. Mon CLSID était 29AB7A12-B531-450E-8F7A-EA94C2F3C05F. Lorsque cette clé est trouvée, sélectionnez la sous-clé "InProcServer2" sous ce nœud Hive et vérifiez le nom de fichier de la DLL problématique dans le cadre Regedit de droite. affiché sous "Par défaut". Si ce fichier réside dans "C: \ Windows \ SysWow64" (tel que C: \ Windows \ SysWow64 \ Redemption.dll "), il est important que vous utilisiez le fichier" C: \ Windows \ SysWow64 \ RegSvr32.exe "pour enregistrez cette DLL à partir de la ligne de commande et NON la valeur par défaut "C: C: \ Windows \ SysWow64 \ RegSvr32.exe c: \ Windows \ SysWow64 \ Redemption.dll, appuyez sur Entrée. Fermez la fenêtre de commande (via "Quitter" puis redémarrez votre ordinateur (utilisez toujours le redémarrage au lieu de Fermer puis redémarrez, car (étrangement) Le redémarrage effectue un arrêt et un rechargement approfondis de tout tandis que "Arrêter" et Power-Up rechargent un cache stocké des pilotes et autres valeurs (qui peuvent être défectueux). Chaque fois que vous enregistrez une DLL à l'avenir, n'oubliez pas d'utiliser le SysWow64 "RegSvr32.exe" pour toute DLL stockée dans le dossier C: \ Windows \ SysWow64 et ce problème c (si elle est causée par un enregistrement incorrect) ne devrait pas se reproduire.
la source
Mon problème était que j'avais la mauvaise version de MS Sync FrameWork (1.0) dans mes références de projet. Après la mise à jour vers la version 2.1, l'erreur a disparu et la vie est à nouveau bonne.
la source
Dans mon cas, je produis un fichier MS Office comme
word
ouexcel
, je lanceWin+R
et exécutedcomcnfg
, dans la configuration DCOM, en plus de sélectionner l'élément de nom lié au bureau (tel que le nom contientExcel
ouWord
ou ouOffice
) etOpen the properties, select Identity tab and select the interactive user.
comme cette réponse ,Mon message d'erreur s'affiche
CLSID {000209FF-0000-0000-C000-000000000046}
, donc je dois essayer de trouver ce CLSID spécifique dans DCOM Config, et il se termine, je le sélectionne et je suis la même étape que leinteractive user
, puis cela fonctionne.la source