2010-10-27 8 views
7

Estoy consiguiendo este StackTrace:COMException (0x800A13E9) - servicios de interoperabilidad de Word

System.Runtime.InteropServices.COMException (0x800A13E9): Word ðú÷ì ááòéä. 
    at Microsoft.Office.Interop.Word.Documents.Add(Object& Template, Object& NewTemplate, Object& DocumentType, Object& Visible) 
    at Crm.DocumentGeneration.Printing.DocumentsPrinter.MergeDocuments(ApplicationClass& wordApp, IEnumerable`1 printDataItems, String tempDirectory, String template) in C:\Work\Danel.Nursing\Crm.DocumentGeneration.Printing\DocumentsPrinter.cs:line 249 

Tras Google un poco parece que COMException (0x800A13E9) está fuera de excepción de memoria, pero no hay suficiente memoria en el servidor para el lanzamiento una nave espacial 8192 naves espaciales.
Aquí es la llamada a la función:

Document document = wordApp.Documents.Add(ref defaultTemplate, ref missing, ref missing, ref missing); 

Nada es nulo o no válido con DefaultTemplate, he comprobado.

+1

* "memoria suficiente en el servidor para iniciar una nave espacial" * - errm Señor, ** 1 MB de RAM ** definitivamente no es suficiente para ejecutar lo que sea que estés haciendo con Word !!! http://www.popsci.com/node/31716 –

+0

@moontear: ¡LOL! pero no está ayudando :( –

Respuesta

8

Aquí está la solución que encontré:

  1. Ponga una carpeta llamada Desktop en C: \ Windows \ SysWOW64 \ config \ systemprofile (Sí, lo sé. ¿WTF?)
  2. Abre Regedit, ve a HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ AppId y edita las dos enteros que tienen un Guid que termina con 46. Elimina cada clave que tienen y agrega una nueva clave llamada RunAs con el valor de Usuario interactivo

Después de eso, comienza a orar. No funciona si accede a través de un servidor de terminal. Lo cual es un problema para mí, jeje.

EDIT: El problema con el servidor de terminal era que solo un administrador puede subir objetos COM por lo que lo que tiene que hacer es suplantar a un administrador.

+1

Guau, la carpeta de Escritorio arregló cosas para mí. Ya había perdido los permisos de configuración de Servicios de componentes en el objeto DCOM para Word, así que tal vez eso hizo que tu paso 2 fuera innecesario para mí. Pero la carpeta definitivamente hizo que las cosas comenzaran a funcionar en Windows Server 2008 para mí. Gracias. – sliderhouserules

+0

@sliderho userules: Eres muy afortunado –

+0

Esto me ha salvado de golpear mi cabeza con mi teclado. Todo lo que necesitaba era crear la carpeta del escritorio, y funcionó muy bien. –

3

Disculpa por esa referencia de 1MB ... Solo tuve que saltar sobre esa.

Al automatizar las aplicaciones de Office, asegúrese de utilizar una cuenta local en el servidor con permisos para el objeto Word COM + y los documentos en los que está tratando de trabajar.
Hay varios mensajes relacionados con el problema que señalan en la edición de la cuenta:

+0

+1 para este comentario sobre correr la palabra en el servidor. De hecho, esa podría no ser la mejor idea del mundo en cualquier caso. Lo que podría tener mejor suerte es configurar una máquina separada, que reciba "solicita" generar documentos DESDE el servidor web, los genera y luego envía una señal al servidor web para que los recoja. Podría ser más simple a largo plazo. – DarinH

+0

Y mi nombre no es Danel: P –

+0

no sé de dónde lo saqué. .. –

-2

Su escenario no es compatible con Microsoft de acuerdo con el artículo de KB Considerations for server-side Automation of Office que establece que

Microsoft no recomienda actualmente, y no admite, Automatización de aplicaciones de Microsoft Office desde cualquier desatendida, no interactiva aplicación de cliente o componente (incluidos ASP, ASP.NET, DCOM y NT Services), porque Office puede mostrar un comportamiento inestable y/o interbloqueo cuando se ejecuta Office en este entorno.

El artículo pasa por alto las alternativas a la automatización del lado del servidor, una de las cuales es Open XML.Es posible que desee comprobar este artículo si aún no lo ha hecho.

+0

Estoy usando Open XML. El problema es que necesito algo para imprimir y Word puede hacer eso. –

Cuestiones relacionadas