Abbiamo un paio di DLL COM di al mio lavoro e spesso incorrere in problemi in cui abbiamo registrare la DLL con regasm e la DLL non funziona. Funziona in altri ambienti live ma per qualche motivo semplicemente non funzionerà in questa unica istanza. Le ragazze sono volubili. A volte lo registriamo, lo annulliamo la registrazione, lo registreremo nuovamente e il riavvio. A volte iniziano misteriosamente a lavorare altre volte no.
Ci sono ancora un paio di cose che possono andare storto.
Assicurarsi che le autorizzazioni corrette siano impostate nelle cartelle in cui si trova la dll e sulla dll stessa. Assicurarsi inoltre che siano presenti eventuali DLL dipendenti e che dispongano anche dell'autorizzazione corretta. Assicurati che tutto ciò a cui la dll ha bisogno di accedere abbia anche le autorizzazioni corrette.
Se ciò non riesce, aprire regedit. Cerca il guid associato all'oggetto com. A volte scoprirai che i percorsi del registro sono stati tutti mescolati. Eliminare eventuali riferimenti all'oggetto com, riavviare e registrarlo di nuovo.
Ho anche visto un'eccezione lanciata nel costruttore che causa problemi. Quando l'oggetto com si avvia, esplode. In uno dei nostri oggetti è stato aggiunto un metodo per inviare un'email quando si verifica un'eccezione.
In un caso avevamo un vecchio oggetto com che non era più compatibile con la versione di Windows in esecuzione. Se hai aggiornato il server su cui si trova potrebbe essere il problema. Nel nostro caso abbiamo scritto il nostro componente per sostituire quello vecchio rotto.
fare in modo che, se l'oggetto COM è fortemente tipizzato che si utilizza il "regasm/tlb/codebase fickle_com_object.dll"
Insomma ci sono diverse cose che causano oggetto COM a non funzionare anche:
- percorsi multipli nel registro
- autorizzazioni di protezione sbagliato su cartelle
- Crashing quando si sta creando
Forse una di queste cose risolverà il tuo problema. So quanto può essere difficile a volte. In bocca al lupo!
fonte
2012-09-07 01:36:45
Il file .dll è registrato sul server UAT, ad es. Con 'regsvr32'? – mellamokb
Scusa se ho dimenticato di menzionare quella parte. Sì dll è registrato sul server UAT usando Regasm. – Bugreport
Hai registrato il tuo.Assemblaggio NET per uso a 32 e 64 bit? Non so se Classic ASP viene eseguito come processo a 32 o 64 bit (presumibilmente in w3wp.exe). Si noti che a volte una chiamata a CreateObject può fallire silenziosamente, si ottiene l'errore solo quando si tenta di utilizzare l'oggetto. Ti suggerisco di provare a creare un'istanza di un oggetto .NET visibile in Microsoft sviluppato da Microsoft per vedere se il sistema funziona in linea di principio, prima di scoprire cosa c'è che non va nella tua particolare implementazione. – Dai