2010-08-13 36 views
44

He desarrollado un sitio web que permite a los usuarios cargar documentos de oficina y luego utiliza el modelo de objetos de oficina para convertir el documento a un archivo HTML que luego muestra en un iFrame.El acceso al modelo de objetos de Office Word a través de los resultados de asp.net "falló debido al siguiente error: 80070005 Acceso denegado".

Por supuesto, he incluido referencias a Office.interop.word, y el sitio funciona bien en mi máquina de desarrollo. Cuando lo cargué en mi servidor de producción, el sitio funciona bien hasta que intento cargar un documento. Inicialmente recibí un error similar que decía "objeto COM no registrado". Me di cuenta de que Word no estaba instalado en mi servidor de producción. Así que instalé palabra y ahora cuando el servidor intenta obtener acceso al modelo de objetos de palabra recibo el siguiente error:

Recuperando el generador de clases COM para el componente con CLSID {000209FF-0000-0000-C000-000000000046} fracasó debido al siguiente error: 80070005 Acceso denegado. (Excepción de HRESULT: 0x80070005 (E_ACCESSDENIED))

Busqué en el registro el CLSID correspondiente y encontré una carpeta correspondiente. Agregué control total a la cuenta IUSR_ y, debido a la persistencia del error, finalmente agregué el control total a "todos" y garanticé que estos permisos se heredaran hasta el resto de la carpeta. Luego agregué el control total a IUSR_ y finalmente agregué control total a "todos" en mi carpeta de microsoft office.

I no sé qué otros permisos otorgar y dónde para hacer que este error "Acceso denegado" desaparezca. Debo otorgarlos en el lugar equivocado, porque por lo que sé, no puedo ser más permisivo que "Todos" "Control total".

¿Alguien puede arrojar algo de luz?

+0

Este uso de Word no es compatible con Microsoft. Además, la escalabilidad es horrible. Hay alternativas disponibles de otros proveedores que admiten este escenario ... –

+0

Esta es la línea de código en particular que se está lanzando esta excepción: Dim wordApplication Como Nueva Microsoft.Office.Interop.Word.Application() Se puede elaborar en el "El uso de la palabra no es compatible con Microsoft? " Eso parece una declaración general. ¿Quiere decir que no se admite el acceso al modelo de objetos word a través de asp.net? Aun así, me gustaría descubrir por qué se lanza esta excepción. Incluso si no es compatible, el modelo de objetos hace lo que necesito, si puedo evitar este error. ¿Puedes indicarme algunas de las alternativas que mencionas? – Camenwolf

+2

Nunca use Office Interop desde una aplicación ASP.NET. Consulte [Consideraciones para la automatización del lado del servidor de Office] (http://support.microsoft.com/kb/257757) –

Respuesta

26

Esto funcionó para mí:

  1. En la línea de comandos poner DCOMCNFG
  2. Servicios de componentes -> Computadoras -> Mi PC -> Configuración DCOM
  3. Find "Microsoft Word 97 - documento de 2003" (Si no lo tiene cheque si su palabra es también de 64 bits (si su Windows es) si no se ejecuta mmc comexp.msc /32 en lugar de DCOMCNFG en el paso 1 como sugiere Darksealhere)
  4. Haga clic derecho -> Propiedades
  5. Ir a la pestaña Seguridad y editar el "personalizar" botones de radio para que IIS_IUSRS podría tener derechos para el lanzamiento y el acceso
  6. Ir a la pestaña Identidad y elegir la opción "El usuario interactivo"
  7. Aplicar cambios e intente de nuevo
  8. Si todo esto falla, vaya a la pestaña "General" y en el menú desplegable "Nivel de autenticación" seleccione "Ninguno".
+0

Bueno. ¡¡Trabajó para mí también !! :) Pero no pude encontrar que IIS_IUSRS diera permiso a todos. ¿Por qué iis_Iusrs no está disponible alguna idea? –

+0

funcionó para mí también :) – noobed

+0

@PrashantSarvaiya Pruebe COMPUTER_NAME \ IIS_IUSRS, donde COMPUTER_NAME es el nombre de su máquina – gyosifov

11

Mire en el Visor de eventos, en Registros de Windows, Sistema, en la máquina del servidor donde está instalado Word. ¿Ves un evento registra que dice algo similar a:

The machine-default permission settings do not grant Local Activation permission for the COM Server application with CLSID {148BEE7F-6123-41EE-8CCA-E390902BD0D8} to the user SomeMachine\SomeUser SID (S-1-5-21-483881670-2168941642-1987552629-1003) from address LocalHost (Using LRPC). This security permission can be modified using the Component Services administrative tool.

Si es así, DCOMCNFG.exe correr, e ir a Servicios de componentes, Equipos, Mi PC (o cualquier nombre), Configuración DCOM (y que sólo puede responda "No" si le pregunta si desea corregir algo) y si el mensaje de registro de eventos es para una aplicación , búsquelo por el nombre en el mensaje de registro de eventos, aquí por nombre del elemento y si el mensaje de registro de eventos es para un CLSID (como en el ejemplo anterior) y luego encuéntrelo en el CLSID "{148B ...}" (es solo un CLSID aleatorio que pegué - probablemente coincidirá con el 000209FF ... anterior) y seleccione Más acciones ... Propiedades, a la pestaña Seguridad.

Aquí puede seleccionar [x] Personalizar y luego Editar, para agregar el permiso de la cuenta de usuario adecuada para activar y acceder a la clase o aplicación DCOM requerida.

Es solo una suposición, pero pruébelo, o algo parecido (es decir, otorgando acceso al CLSID a través de DCOMCNFG).

58

Ok, he resuelto este problema con estos pasos:

  1. En la línea de comandos poner DCOMCNFG
  2. Expandir Raíz de consola> Service Component> Equipos, haga clic en Mi PC y seleccione Propiedades
  3. en la ficha COM Seguridad> Permisos de inicio y activación Haga clic en Editar valores predeterminados
  4. Añadir al usuario (Ej. IIS_IUSRS) o servicio
  5. Seleccione Permitir Ejecución local y la activación local

Entonces Excel, Word y otras aplicaciones pueden funcionar, buena suerte.

+0

Tuve que usar IUSR –

+0

intenté anteriormente pero podría tener éxito. obteniendo lo mismo otra vez – soundy

+0

He seguido esto. El error anterior se eliminó. var objWord = new Microsoft.Office.Interop.Word.Application(); objWord.Documents.Open (FileName: htmlTemplateFile + @ "\" + strFilename); objWord.Visible = false; si (objWord.Documents.Count> 0) { }} Pero ahora no estoy recibiendo objWord.Documents.Count> 0 aunque la docuemtn está allí. Lo mismo funciona bien con Visual Studio Developer Server –

1

Si no puede encontrar una aplicación de Microsoft Word en DCOM

El sistema de 64 bits con el bit Oficina 32 intente esto:

  1. elemento de la lista
  2. inicio
  3. Run
  4. mmc-32
  5. Archivo
  6. Añadir quitar complemento
  7. Servicios de componentes
  8. Añadir
  9. OK
  10. raíz de la consola
  11. Servicios de componentes
  12. Computadoras
  13. Mi PC
  14. Configuración DCOM

después de eso

  1. encontrar "Microsoft Word 97 - 2003 Documento" (cheque Si no lo tiene, si su Palabra es también de 64 bits (si su Windows es))
  2. clic derecho -> Propiedades
  3. ir a la pestaña Seguridad y editar los botones "Personalizar" de radio para que IIS_IUSRS podrían tener derechos para el lanzamiento y el acceso
  4. ir a la pestaña identidad y elegir la opción "El usuario interactivo" Aplicar cambios y vuelve a intentarlo
  5. Si todo esto falla , vaya también a la pestaña "General" y en el menú desplegable "Autenticación Nivel", seleccione "Ninguno".
4

tuve mis momentos difíciles calcular esto usando la respuesta aceptada, porque el Microsoft Word 97 - de 2003 DOCUMENTO DE registro no fue incluido entre los elementos de configuración DCOM. He encontrado la solución en this Technet blog post, donde correctamente explican el tema:

It’s important to note that if you install 32-bit Microsoft Office on a 64-bit machine, you may need to use the 32-bit DCOM config manager to view the programs, depending on your operating system.

On x64 operating systems from Windows XP to Windows Server 2008, the 64-bit version of DCOMCNFG.EXE does not correctly configure 32-bit DCOM applications for remote activation. This behavior causes components that are meant to be activated remotely instead being activated locally. This behavior does not occur in Windows 7 and Windows Server 2008 R2 and higher versions.

Ref.: http://msdn.microsoft.com/en-us/library/windows/desktop/ms678426(v=vs.85).aspx

Y también sugiere utilizar el siguiente comando de línea de comandos (en lugar de DCOMCNFG) como una solución efectiva:

mmc comexp.msc /32 

Qué fuerza el administrador de configuración de DCOM de 32 bits en lugar del de 64 bits y permite realizar los pasos descritos en la respuesta aceptada. Si esto todavía no funciona, el artículo también explica una serie de otras soluciones posibles.

Para obtener más información sobre este tema, también puede read this post.

Cuestiones relacionadas