web-dev-qa-db-fra.com

Le composant ActiveX ne peut pas créer d'objet

Je viens d'installer une application tierce sur mon serveur Windows Server 2008

Le composant ActiveX ne peut pas créer d'objet

message lorsque j'essaie d'accéder à l'aide d'une variable CreateObject dans VBScript.

Il est définitivement installé et existe sous "Programmes et fonctionnalités". Est-ce que quelqu'un a une liste de choses que je peux vérifier pour comprendre ce qui se passe?

J'ai maintenant essayé d'enregistrer la DLL en utilisant regsvr32.exe /i bob.dll comme suggéré, mais j'obtiens cette erreur:

Le module "Bob.dll" a été chargé mais le point d’entrée DllRegisterServer était pas trouvé.

Assurez-vous que "Bob.dll" est un fichier DLL ou OCX valide, puis réessayez.

Je devrais noter qu'il s'agit d'une application 32 bits sur un ordinateur 64 bits à Ce point. Cela fonctionne aussi très bien sur ma machine qui est Windows XP 32 bits.

32
GordyII

Il est apparu que cette application fonctionnait sous VBScript, je devais faire deux choses.

  1. Exécutez RegAsm.exe pour enregistrer les DLL.
  2. Exécutez le C:\Windows\SysWOW64\cscript.exe pour exécuter mon VBScript.

Merci pour votre aide.

AINSI QUE si cela ne fonctionne pas, consultez l'autre réponse ici sur l'activation des applications 32 bits.

44
GordyII

Vérifiez également que l'option "Activer les applications 32 bits" est définie sur True dans les paramètres avancés de DefaultAppPool dans IIS.

37
Keith Trangmar

L'application tente de créer un objet COM et même si ce COM DLL existe, il peut dépendre d'un autre DLL qui n'est pas installé. Vous pouvez utiliser DependencyWalker pour savoir si tel est le cas.

10
MrTelly

Je sais que c'est une vieille question et a déjà une réponse marquée comme correcte mais cela ne m'a pas aidé.

Pour toutes les âmes pauvres venant de cette façon à l'avenir, vérifiez les paramètres de votre navigateur-

Pour moi, en utilisant IE, le correctif était d'aller dans Outils/Options Internet, onglet Sécurité, pour la zone pertinente, "niveau personnalisé" et vérifier les paramètres ActiveX. Le réglage de "Activer" des contrôles ActiveX d'initialisation et de script non marqués comme sûrs pour le script a corrigé ce problème pour moi.

5
DannykPowell

De même, lorsque vous enregistrez le composant, veillez à utiliser la version 32 bits de regsvr32.exe . Si vous exécutez simplement regsvr32.exe dans une invite élevée, la version 64 bits standard (qui situé dans C:\Windows\System32)

La version dont vous avez besoin, selon moi, se trouve dans C:\Windows\SysWow64\regsvr32.exe

5
Verakso

Il semble vraiment que l'objet que vous référencez ne soit pas enregistré sur le système. Je sais que vous avez dit qu'il est installé, mais cela ne signifie pas nécessairement qu'il est enregistré. Pour confirmer cela, recherchez le progID que vous avez utilisé dans votre registre. 

Exemple pour ce code: 

set objFSO = CreateObject("Scripting.FileSystemObject") 

Je rechercherais Scripting.FileSystemObject dans le registre. Ensuite, je regarderais la clé de registre au-dessus de la valeur trouvée, pour la valeur InProcServer32. Cela vous donnera le chemin d'accès au fichier ActiveX à partir duquel il a été enregistré (pour Scripting.FileSystemObject, le fichier est "c:\windows\system32\scrrun.dll"). 

Si vous ne trouvez pas votre progID dans la base de registres, il n’est pas enregistré sur votre système, ce qui est votre problème. S'il n'est pas enregistré, vous devez savoir quel fichier l'enregistre, qui est généralement un fichier .ocx ou un fichier .dll dans le même chemin de dossier que votre application tierce, puis enregistrer ces fichiers. Voici la commande pour enregistrer un fichier: 

regsvr32 /i "c:\windows\system32\scrrun.dll"

Même si vous trouvez la valeur progID dans le registre et qu'elle référence un fichier présent sur votre système, vous souhaiterez peut-être essayer de ré-enregistrer le fichier. J'ai constaté que parfois l'enregistrement était cassé quelque part et qu'il était plus facile de ré-enregistrer les fichiers que de résoudre le problème.

2
mrTomahawk

Si c'est un COM/Active X 32 bits, utilisez la version 32 bits de cscript.exe/wscript.exe situé dans C:\Windows\SysWOW64 \.

1
Jean-Philippe Ménard

J'ai le même problème dans un programme VB6 que j'écris, où un formulaire utilise un objet ScriptControl pour exécuter les scripts VBS sélectionnés par l'utilisateur. 

Cela a bien fonctionné jusqu'à l'autre jour, lorsqu'il a soudainement commencé à afficher «Erreur d'exécution 429» lorsque le VBScript a tenté de créer un Scripting.FileSystemObject.

Après être devenue folle pendant une journée entière, en essayant toutes les solutions proposées ici, j'ai commencé à soupçonner que le problème se trouvait dans ma candidature.

Heureusement, j'avais une version de sauvegarde de ce formulaire: j'ai comparé leurs codes et découvert par inadvertance que j'avais défini la propriété UseSafeSubset de mon objet ScriptControl sur True.

C'était la seule différence dans le formulaire, et après avoir restauré la copie de sauvegarde, cela a fonctionné à merveille.

J'espère que cela peut être utile à quelqu'un. Avec VB6! :-)

Max - Italie

0
Max1234-ITA

Je rencontre aussi la même erreur dans VBScript.

Set objFSO = CreateObject("Scripting.FileSystemObject")

Solution:
Ouvrez la ligne de commande, exécutez: 

regsvr32 /i "c:\windows\system32\scrrun.dll"

et il fonctionne

0
Le Truong Uy Phu

J'ai eu le même problème avec Excel, j'essayais d'utiliser un 32 COM DLL avec une version Excel 64 bits et j'ai eu cette erreur. Je reconstruis la dll COM à une version 64 bits et l'erreur disparaît. Assurez-vous donc que votre dll COM a la même architecture (x86 vs x64) que votre application.

0
Malick

J'ai eu ce problème également. J'essayais d'exécuter une vieille DLL 32 bits dans un système 64 bits. Je l'ai obtenu en copiant le fichier .dll dans le répertoire C:\Windows\SysWoW64\et en exécutant ceci:

%systemroot%\SysWoW64\regsvr32 "C:\Windows\SysWoW64\thenameofyourdll.dll"

Et aussi activer IIS pour exécuter des applications 32 bits

0
Chris Broski