2010-10-27 12 views
7

sto ottenendo questo stacktrace:COMException (0x800A13E9) - servizi di interoperabilità di parole

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 

Dopo googling un po 'sembra che COMException (0x800A13E9) è fuori di eccezione di memoria ma c'è abbastanza memoria sul server di lancio una navicella spaziale 8192 astronavi.
Ecco la chiamata di funzione:

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

Nulla è nullo o non valido con DefaultTemplate, ho controllato.

+1

* "Memoria sufficiente sul server per avviare un'astronave" * - errm Sir, ** 1MB di RAM ** non è sicuramente sufficiente per eseguire qualsiasi cosa tu stia facendo con Word !!! http://www.popsci.com/node/31716 –

+0

@moontear: LOL! ( –

risposta

8

Ecco la soluzione che ho trovato:

  1. mettere una cartella denominata Desktop su C: \ Windows \ SysWOW64 \ config \ systemprofile (Sì, lo so. WTF?)
  2. Apri regedit, vai a HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ AppId e modifica i due input che hanno un Guid che termina con 46. Elimina ogni chiave che hanno e aggiungi una nuova chiave chiamata RunAs con il valore di Utente interattivo

Dopo, inizia a pregare. Non funziona se si accede attraverso un server terminal. Che è una specie di un problema per me hehe.

MODIFICA: Il problema con il server terminal era che solo un amministratore può sollevare oggetti COM, quindi ciò che si deve fare è impersonare un amministratore.

+1

Wow, la cartella Desktop ha sistemato le cose per me. Avevo già messo un po 'in giro con i permessi di impostazione dei Servizi componenti sull'oggetto DCOM per Word quindi forse questo ha reso il tuo passaggio 2 inutile per me, ma la cosa della cartella ha fatto sì che le cose iniziassero a funzionare su Windows Server 2008 per me. Grazie. – sliderhouserules

+0

@sliderho userules: sei molto fortunato di –

+0

Questo mi ha semplicemente salvato dal battere la testa con la tastiera. Tutto ciò di cui avevo bisogno era creare la cartella del desktop e funzionava alla grande. –

3

dispiace 'bout che il riferimento 1MB ... ho dovuto saltare su quello.

Durante l'automazione delle applicazioni di Office assicurarsi di utilizzare un account locale sul server con le autorizzazioni per l'oggetto COM + di Word, nonché i documenti su cui si sta tentando di lavorare.
Ci sono diversi messaggi relativi al problema che punta a un problema conto:

+0

+1 per questo commento sull'esecuzione di word sul server. In realtà non potrebbe essere la più grande idea del mondo in ogni caso, quello con cui potresti avere più fortuna è impostare una macchina separata, che riceve "richieste" per generare documenti dal server web, li genera e poi segnala al server web di prenderli. Potrebbe essere più semplice a lungo termine – DarinH

+0

E il mio nome non è Danel: P –

+0

non so da dove l'ho preso. .. –

-2

vostro scenario non è supportato da Microsoft, secondo l'articolo KB Considerations for server-side Automation of Office cui si afferma che

Microsoft attualmente non consiglia, e non supporta, l'automazione delle applicazioni di Microsoft Office da qualsiasi incustoditi, non interattivo applicazione client o di un componente (ad esempio ASP, ASP.NET, DCOM e servizi NT), in quanto Ufficio può esibire un comportamento instabile e/o situazione di stallo quando Office viene eseguito in questo ambiente.

L'articolo passa poi alle alternative all'automazione lato server, una delle quali è Open XML.Potresti voler controllare questo articolo se non lo hai già fatto.

+0

Sto usando Open XML. Il problema è che ho bisogno di qualcosa con cui stampare e la parola può farlo. –