2012-12-11 7 views
11

Windows 7 a 32 bit, IIS 7.5.760016385Server.CreateObject() fallimento con 32 bit di Windows e IIS 7

Ho creato una DLL in Visual Basic 6.0 e cercando di utilizzarlo dall'interno di codice ASP classico:

set obj = Server.CreateObject("a.b") 

ottengo il seguente errore:

006 ASP 0178
Server.CreateObject Access Error
The call to Server.CreateObject failed while checking permissions. Access is denied to this object.
err.number = -2147024891

ho provato a generare l'utente iusr_cmpname e dare diritti ad esso nel sito predefinito e la directory virtuale di questa pagina ASP. Ho REGSVR32'd la dll.

Sono andato a "Attivare e disattivare le funzionalità di Windows" e selezionato IIS/Servizi Web/Funzionalità di sviluppo applicazioni quindi CONTROLLATO da ASP, ASP.net, estensioni ISAPI e filer ISAPI.

Ho seguito molti lead in diversi Newsgroup ma riesco a superare questo problema. Abbiamo provato l'anno scorso, un anno e mezzo fa e ho avuto lo stesso problema. Dal momento che non siamo riusciti a superare questo problema, siamo tornati a Windows NT. Non abbiamo mai avuto questo problema su NT.

Ora stiamo provando di nuovo a superare questo, così possiamo passare nuovamente a Windows 7. Sembra che molte persone abbiano avuto questo problema, ma qualsiasi soluzione che hanno trovato e pubblicato, non sembra essere quello di cui ho bisogno.

Qualsiasi aiuto sarà apprezzato. Grazie.

+0

Qual è il messaggio di errore che si riceve da IIS? – Treborbob

+0

Err.description è "006 ~ ASP 0178 ~ Errore accesso server.CreateObject ~ La chiamata a Server.CreateObject ha avuto esito negativo durante il controllo delle autorizzazioni. L'accesso è negato a questo oggetto." err.number = -2147024891 – user1894838

+0

hai provato a rendere l'utente di apppool/iusr un amministratore locale? solo per testare ... o usare un altro utente windows per l'appool e l'applicazione web aspetta ... hai provato ad aggiungere un'applicazione web invece di una directory virtuale? – ulluoink

risposta

0

Questa pagina suggerisce che il problema potrebbe essere il diritto di accesso assegnato al runtime VB. Prova ad assegnare a tutti i permessi di lettura ed esecuzione su Msvbvm60.dll.

http://support.microsoft.com/kb/278013

+0

Grazie Peter, ci ho provato prima. Ho aggiunto diritti di esecuzione ed esecuzione per "Everyone", "iusr_comp_name", "Servizio di rete" – user1894838

4

vi consiglio vivamente di utilizzare Procmon per trovare la violazione di accesso. Ho avuto un problema simile anni fa, e questa era l'unica cosa che lo risolveva. In quello scenario, si è rivelata una mancanza di autorizzazioni sulla cartella temporanea del sistema.

Se pubblichi i risultati di Procmon, potrei essere in grado di modificare questa risposta per essere più utile.

+0

Ciao David, ho aggiunto Process Monitor. Quando provo a eseguire questa pagina ASP, PRL.asp, si dice che il nome processo è w3wp.exe ... L'operazione è QueryAllInformationFile ... Percorso: d: \ xxx \ PRL.asp ... Risultato: buffer overflow .. ... la riga successiva dice: Nome processo è w3wp.exe ... L'operazione è QueryOpen ... percorso: d: \ xxx \ prl.asp \ web.config ... Risultato: percorso non trovato. --------------grazie. Qualche idea? – user1894838

+0

Sembra che tu non abbia un file web.config - ci sono altri errori? –

+0

questa è una vecchia app ASP, abbiamo un GLOBAL.asa e non è necessario web.config. Altri errori: RegQueryValue e RegQueryKey dicono che Nome non trovato. Alcune voci dicono Buffer troppo piccolo o Buffer Overflow. – user1894838

4

Il problema sembra essere correlato a IIS che non è in grado di accedere alla DLL VB6 Active X personalizzata sul file system. Ho registrato una dll personalizzata, che ho creato, nella stessa directory dell'applicazione Web predefinita ed è stata in grado di ottenere ASP per creare l'oggetto.

Ecco quello che ho fatto:

  • nuova installazione di Windows 7 Professional a 64 bit, SP1.

  • attivare la funzionalità Windows ASP

  • questa procedura solo per Windows a 64 bit - Utilizzando Gestione IIS, consentono applicazioni a 32 bit per il pool di applicazioni di default.

enable 32-bit application pool

  • Creare un semplice VB6 Active X dll (nome di classe è "CXUtils.. Utils "), che aggiunge due numeri di ingresso, e restituisce il risultato

Utils.cls:

Public Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer  
    Sum = a + b 
End Function 
  • Questo è il passo importante - in un prompt dei comandi amministrativo, registrare il Vb6 Active X DLL nella posizione di applicazione Web predefinito: C: \ inetpub \ wwwroot

Register Custom VB6 DLL

  • Creare e installare una semplice pagina ASP che istanzia la dll dall'alto. Il percorso di installazione è l'impostazione predefinita posizione applicazione web C: \ inetpub \ wwwroot

Default.asp:

<%@ Language=VBScript %> 
<% 
Option Explicit 
Response.Expires = 0 
Response.Expiresabsolute = Now() - 1 
Response.AddHeader "pragma","no-cache" 
Response.AddHeader "cache-control","private" 
Response.CacheControl = "no-cache" 

Function Sum(a, b) 
    Sum = a + b 
End Function 

Function Sum2(a, b) 
    Dim adder 
    set adder = Server.CreateObject("CXUtils.Utils") 
    Sum2 = adder.Sum(a, b) 
    set adder = nothing 
End Function 
%> 
<html> 
    <head> 
     <title>Add</title> 
    </head> 
    <body> 
    <b>2 + 3</b> = <%= Sum(2,3) %><br /> 
    <b>3 + 4</b> = <%= Sum2(3,4) %> 
    </body> 
</html> 
  • Sfoglia per la web app e vedere i risultati

Sample asp page results

Mi scuso se questo non è tutto compilato - c'era un sacco di modifiche per ottenere il formato per apparire correttamente.

+0

Grazie Chue, sulla mia vecchia macchina XP, questo ha funzionato bene senza nemmeno registrare l'oggetto COM nel Gestore componenti o con REGSVR32. sul nuovo Windows 7, fallisce sulla linea createObject. Proverò a registrarlo in entrambi o in entrambi i modi.Probabilmente qualcosa di così semplice porterà a una migliore comprensione di questo problema – user1894838

+0

Hey Chue, semplicemente mi sono registrato con regsvr32 e ha funzionato Cercherò di annullare la registrazione e quindi utilizzare il Component Manager, quindi entrambi, grazie per il vostro aiuto, cercherò di aumentare la complessità di questo semplice oggetto COM fino a quando non sarà come quello che fallisce sempre. il tuo aiuto. --- Doug – user1894838

0

Penso che stavo avendo un problema simile. Stavo cercando di eseguire il codice di debug interattivo in una DLL VB6 in esecuzione nell'IDE VB6 da un'applicazione ASP classica. Quando l'applicazione ha eseguito l'istruzione Server.CreateObject, ha restituito il seguente errore:

Oggetto server: 006 ~ ASP 0178 ~ Errore accesso server.CreateObject ~ La chiamata a Server.CreateObject ha avuto esito negativo durante il controllo delle autorizzazioni. L'accesso è negato a questo oggetto.

BTW, eseguo IIS 7.5 in ambiente Windows 7. Alla fine ho trovato un articolo di Microsoft che diceva che il problema era dovuto a una voce di registro mancante per VB ASP Debug in DCOM e/o autorizzazioni inadeguate con DCOM, non IIS. L'URL dell'articolo è http://support.microsoft.com/kb/q259725. Ho implementato Work Around # 1. Un riavvio più tardi, potrei entrare nel codice VB DLL da ASP. Chalk one up per Microsoft, e non lo dico molto spesso :-)

0

Un altro approccio che potrebbe funzionare, è installare la DLL come applicazione DCOM su dcomcnfg. Funzionerà con credenziali diverse.

Problemi correlati