2009-03-18 19 views
28

Ho appena installato un app di terzi sul mio 2008 Server Windows Server e ottengo il messaggiocomponente ActiveX non può creare l'oggetto

ActiveX Component can't create object

quando provo ad accedere utilizzando un CreateObject in VBScript.

È definitivamente installato ed esiste in "Programmi e funzionalità". Qualcuno ha una lista di cose che posso controllare per capire cosa sta succedendo?

Ho provato a registrare la DLL utilizzando regsvr32.exe /i bob.dll come suggerito ma ottengo questo errore:

The Module "Bob.dll" was loaded but the entry-point DllRegisterServer was not found.

Make sure that "Bob.dll" is valid DLL or OCX file and then try again.

Vorrei sottolineare che si tratta di un'applicazione a 32 bit su un computer a 64 bit ad questo punto . Funziona perfettamente anche sulla mia macchina, che è Windows XP a 32 bit.

+0

Una sveltina ... Sei sicuro di avere il prog corretto? –

risposta

38

Si scopre che questa applicazione funziona con VBScript, ho dovuto fare due cose.

  1. Eseguire RegAsm.exe per registrare le DLL.
  2. Eseguire C: \ Windows \ SysWOW64 \ cscript.exe per eseguire il mio VBScript.

Grazie per tutto il vostro aiuto.

ANCHE se non funzionano, consultare l'altra risposta here relativa all'abilitazione delle applicazioni a 32 bit.

+2

Grazie per questo! –

+3

Bel risparmio! Ho battuto la testa su questo per gli ultimi 20 minuti. Sono un po 'frustrato dalla mancanza di messaggi di errore utili dall'interprete a 32 bit. – Eric

+0

@JeroenLandheer, renderlo più simile a 2 ore: P – Carlos

9

L'app sta tentando di creare un oggetto COM e anche se la DLL COM esiste, potrebbe dipendere da un'altra DLL che non è installata. È possibile utilizzare DependencyWalker per scoprire se questo è il caso.

2

Sembra davvero che l'oggetto a cui si fa riferimento non sia registrato nel sistema. So che hai detto che è installato, ma questo non significa necessariamente che sia registrato. Per confermare questo, cerca il progID che hai usato nel tuo registro.

Esempio di questo codice:

set objFSO = CreateObject("Scripting.FileSystemObject") 

vorrei cercare Scripting.FileSystemObject nel Registro di sistema. Quindi guarderei la chiave di registro sopra il valore trovato, per il valore InProcServer32. Ciò fornirà il percorso del file ActiveX da cui è stato registrato (per Scripting.FileSystemObject il file è "c: \ windows \ system32 \ scrrun.dll").

Se non riesci a trovare il tuo progID nel registro, non è registrato sul tuo sistema quale è il tuo problema. Se non è registrato, è necessario scoprire quale file lo registra, che di solito è un file .ocx o .dll nello stesso percorso della cartella dell'app di terze parti, quindi registrare questi file. Ecco il comando per registrare un file:

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

Anche se si trova il valore progID nel Registro di sistema e si fa riferimento a un file che è presente sul sistema, si può ancora voglia di provare nuovamente la registrazione del file. Ho scoperto che a volte la registrazione si è rotta in qualche modo da qualche parte ed è stato più facile registrare nuovamente i file, quindi è stato risolto il problema.

5

So che questa è una vecchia domanda e ha già una risposta contrassegnata come corretta ma che non mi ha aiutato.

Per qualsiasi povere anime che vengono in questo modo, in futuro, controllare il browser Impostazioni-

Per me, utilizzando IE, la correzione è stato quello di andare in Strumenti/Opzioni Internet, scheda Protezione, per la zona in questione, "su misura livello "e controllare le impostazioni ActiveX. L'impostazione "Inizializza e script controlli ActiveX non contrassegnati come sicuri per lo script" su "Abilita" risolve il problema per me

+0

ma funzionerà nel tuo browser ... non puoi aspettarti che tutti gli utenti lo facciano per usare il tuo web, quindi non è un po 'inutile? –

+0

Per molte applicazioni sarebbe inutile. Ad esempio, nel nostro ambiente, la nostra applicazione browser viene utilizzata solo nella nostra azienda, quindi abbiamo il controllo sulle impostazioni. (È un vecchio programma, non è necessario, ma funziona.) – Jemmeh

5

Anche quando si registra il componente, assicurarsi di utilizzare la versione a 32 bit di regsvr32.exe. Se si esegue semplicemente regsvr32.exe in un prompt con privilegi elevati, verrà utilizzata la versione standard a 64 bit (che è abbastanza stranamente ubicata in C: \ Windows \ System32)

La versione in cui credo sia necessario si trova in C: \ Windows \ SysWow64 \ regsvr32.exe

+1

Grazie per il promemoria; ha avuto una situazione simile a quella dell'OP e il tuo commento mi ha aiutato. –

+0

Questa è la soluzione che ha risolto il problema per me ed è molto più veloce di altre soluzioni per provare anche –

36

Vale anche la pena di verificare che "Abilita applicazioni a 32 bit" sia impostato su Vero nelle impostazioni avanzate di DefaultAppPool in IIS.

+8

Vorrei poterlo votare ancora di più! –

+0

Questo ha funzionato per me. –

+1

Sono d'accordo con @LeeEnglestone. È in Impostazioni avanzate> (Generale)> Abilita applicazioni a 32 bit –

0

Ho anche riscontrato lo stesso errore in vbscript.

Set objFSO = CreateObject("Scripting.FileSystemObject") 

Soluzione:
Aperto riga di comando, eseguire:

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

e funziona

0

Ho avuto lo stesso problema in un programma VB6 che sto scrivendo, in cui un modulo utilizza un oggetto ScriptControl per eseguire VBScript selezionato dall'utente.

Ha funzionato bene fino all'altro giorno, quando ha improvvisamente iniziato a visualizzare "Errore di runtime 429" quando VBScript ha tentato di creare Scripting.FileSystemObject.

Dopo essere impazzito per un giorno intero, provando tutte le soluzioni proposte qui, ho iniziato a sospettare che il problema fosse nella mia applicazione.

Fortunatamente, ho avuto una versione di backup di tale modulo: ho confrontato i loro codici e ho scoperto che inavvertitamente avevo impostato la proprietà UseSafeSubset del mio oggetto ScriptControl su True.

Era l'unica differenza nel modulo, e dopo aver ripristinato la copia di backup ha funzionato come un fascino.

Spero che questo possa essere utile a qualcuno. Su con VB6! :-)

Max - Italia

1

Se la sua un po '32 COM/Active X, la versione a 32 bit di uso cscript.exe/wscript.exe si trova in C: \ Windows \ SysWOW64 \

0

I Ho avuto lo stesso problema con Excel, stavo cercando di utilizzare una DLL di 32 COM con una versione a 64 bit di Excel e ho ricevuto questo errore. Ricostruisco la DLL COM in una versione a 64 bit e l'errore scompare. Quindi assicurati che la tua DLL COM abbia la stessa architettura (x86 vs x64) della tua applicazione.

Problemi correlati