Riepilogo
Gli sviluppatori possono usare Automation in Microsoft Office per creare soluzioni personalizzate che utilizzano le funzionalità e le funzionalità incorporate nel prodotto Office. Sebbene tale sviluppo programmatico possa essere implementato su un sistema client con relativa facilità, possono verificarsi numerose complicazioni se l'automazione viene eseguita da codice lato server come Microsoft Active Server Pages (ASP), ASP.NET, DCOM o un servizio Windows NT.
Questo articolo illustra le complicazioni che gli sviluppatori possono incontrare. L'articolo offre anche alternative all'automazione in grado di accelerare le prestazioni. Gli sviluppatori devono essere consapevoli, tuttavia, che i suggerimenti forniti in questo articolo sono solo a scopo informativo. Microsoft non consiglia né supporta l'automazione di Office sul lato server.
Nota
In questo contesto, il motore di database di Access Redistributable e Access Runtime sono considerati componenti di Microsoft Office. Il termine "lato server" si applica anche al codice in esecuzione su una workstation Windows, se il codice è in esecuzione da una workstation Windows diversa dalla workstation interattiva dell'utente connesso. Ad esempio, il codice avviato dall'Utilità di pianificazione nell'account SYSTEM viene eseguito nello stesso ambiente del codice ASP "lato server" o del codice DCOM. Di conseguenza, possono verificarsi molti dei problemi descritti in questo articolo. Per ulteriori informazioni sulle workstation Windows e su COM, vedere la sezione "Ulteriori informazioni" e la sezione "Riferimenti".
Altre informazioni
Tutte le versioni correnti di Microsoft Office sono state progettate, testate e configurate per essere eseguite come prodotti dell'utente finale in una workstation client. Presuppongono un desktop interattivo e un profilo utente. Non forniscono il livello di reentrancy o sicurezza necessario per soddisfare le esigenze dei componenti lato server progettati per l'esecuzione automatica.
Microsoft attualmente non consiglia e non supporta l'automazione di applicazioni di Microsoft Office da qualsiasi applicazione o componente client non presidiato, non interattivo (inclusi i servizi ASP, ASP.NET, DCOM e NT), perché Office potrebbe presentare un comportamento instabile e/o un deadlock quando Office viene eseguito in questo ambiente.
Se si crea una soluzione che viene eseguita in un contesto lato server, è consigliabile provare a usare componenti resi sicuri per l'esecuzione automatica. In alternativa, è consigliabile provare a trovare alternative che consentano l'esecuzione di almeno una parte del codice. Se si usa un'applicazione di Office da una soluzione lato server, l'applicazione non dispone di molte delle funzionalità necessarie per una corretta esecuzione. Inoltre, correrai dei rischi con la stabilità della tua soluzione complessiva.
Problemi con l'uso dell'automazione lato server di Office
Gli sviluppatori che provano a utilizzare Office in una soluzione lato server devono essere consapevoli di cinque aree principali in cui Office si comporta in modo diverso rispetto al previsto a causa dell'ambiente. Se si vuole che il codice venga eseguito correttamente, è necessario risolvere questi problemi e ridurne il più possibile gli effetti. Considerare attentamente questi problemi quando si compila l'applicazione. Una soluzione non può risolvere tutti i problemi. Progettazioni diverse richiedono che tu dia priorità agli elementi in modo diverso.
- Identità utente: le applicazioni di Office assumono un'identità utente quando vengono eseguite le applicazioni, anche quando l'automazione avvia le applicazioni. Le applicazioni tentano di inizializzare barre degli strumenti, menu, opzioni, stampanti e alcuni componenti aggiuntivi in base alle impostazioni nell'hive del Registro di sistema utente per l'utente che avvia l'applicazione. Molti servizi vengono eseguiti con account che non dispongono di profili utente, ad esempio l'account SYSTEM o gli account IWAM_[servername]). Di conseguenza, Office potrebbe non essere inizializzato correttamente all'avvio. In questo caso, Office restituisce un errore nella funzione CreateObject o nella funzione CoCreateInstance. Anche se l'applicazione di Office può essere avviata, altre funzioni potrebbero non funzionare correttamente se non esiste alcun profilo utente.
- Interattività con il desktop: le applicazioni di Office presuppongono di essere eseguite in un desktop interattivo. In alcune circostanze, potrebbe essere necessario rendere visibili le applicazioni per il corretto funzionamento di determinate funzioni di automazione. Se si verifica un errore imprevisto o se è necessario un parametro non specificato per completare una funzione, Office è progettato per visualizzare una finestra di dialogo modale in cui chiede all'utente cosa vuole fare. Una finestra di dialogo modale su un desktop non interattivo non può essere ignorata. Di conseguenza, il thread smette di rispondere (si blocca) a tempo indeterminato. Sebbene alcune procedure di codifica possano contribuire a ridurre la probabilità di questo problema, non possono prevenire completamente il problema. Questo fatto da solo rende rischiosa e non supportata l'esecuzione di applicazioni di Office da un ambiente lato server.
- Confinanza e scalabilità: i componenti lato server devono essere componenti COM multi-thread altamente rientranti con un sovraccarico minimo e un throughput elevato per più client. Le applicazioni Office sono in quasi tutto l'esatto opposto. Le applicazioni di Office sono server di automazione basati su STA non rientranti, progettati per fornire funzionalità diverse ma che richiedono molte risorse per un singolo client. Le applicazioni offrono poca scalabilità come soluzione lato server. Inoltre, le applicazioni hanno limiti fissi per elementi importanti, come la memoria. Questi non possono essere modificati tramite la configurazione. Ancora più importante, le applicazioni utilizzano risorse globali come file mappati alla memoria, componenti aggiuntivi o modelli globali e server di automazione condivisi. Ciò può limitare il numero di istanze che possono essere eseguite contemporaneamente e può portare a race condition se le applicazioni sono configurate in un ambiente multi-client. Gli sviluppatori che intendono eseguire più istanze di un'applicazione di Office contemporaneamente devono prendere in considerazione il "pooling" o la serializzazione dell'accesso all'applicazione di Office per evitare potenziali deadlock o danneggiamento dei dati.
- Resilienza e stabilità: Office 2000, Office XP, Office 2003 e Office 2007 usano la tecnologia Microsoft Windows Installer (MSI) per semplificare l'installazione e la riparazione automatica per un utente finale. MSI introduce il concetto di "installazione al primo utilizzo". In questo modo le funzionalità possono essere installate o configurate dinamicamente in fase di esecuzione per il sistema o, più spesso, per un utente specifico. In un ambiente lato server, questo rallenta le prestazioni e aumenta la probabilità che venga visualizzata una finestra di dialogo che chiede all'utente di approvare l'installazione o di fornire un disco di installazione. Anche se questa strategia è progettata per aumentare la resilienza di Office come prodotto per l'utente finale, l'implementazione delle funzionalità MSI da parte di Office è controproducente in un ambiente lato server. Inoltre, la stabilità di Office in generale non può essere garantita quando Office viene eseguito lato server perché non è stato progettato o testato per questo tipo di utilizzo. L'utilizzo di Office come componente di servizio in un server di rete può ridurre la stabilità del computer e di conseguenza la stabilità dell'intera rete.
- Sicurezza lato server: le applicazioni di Office non sono mai state progettate per l'uso sul lato server. Pertanto, le applicazioni di Office non prendono in considerazione i problemi di sicurezza che devono affrontare i componenti distribuiti. Office non autentica le richieste in arrivo. Office inoltre non protegge dall'esecuzione accidentale di macro o dall'avvio di un altro server che potrebbe eseguire macro dal codice sul lato server. Non aprire i file caricati sul server da un sito Web anonimo. In base alle ultime impostazioni di protezione, il server può eseguire macro in un contesto di sistema o amministratore con privilegi completi e può quindi compromettere la rete. Office usa inoltre molti componenti sul lato client (ad esempio Simple MAPI, WinInet e MSDAIPP) in grado di memorizzare nella cache le informazioni di autenticazione del client per velocizzare l'elaborazione. Se Office è automatizzato sul lato server, un'istanza può servire più di un client. Se le informazioni di autenticazione sono state memorizzate nella cache per quella sessione, un client può usare le credenziali memorizzate nella cache di un altro client. Pertanto, il client può ottenere autorizzazioni di accesso non concesse impersonando altri utenti.
Oltre ai problemi tecnici, è necessario considerare anche le questioni di licenza. Le attuali linee guida sulle licenze impediscono l'uso delle applicazioni di Office su un server per soddisfare le richieste dei client, a meno che tali client non dispongano di copie di Office con licenza. L'uso dell'automazione sul lato server per fornire funzionalità di Office alle workstation senza licenza non è coperto dal Contratto di licenza con l'utente finale (EULA).
Oltre a questi problemi, quando si tenta di automatizzare Office sul lato server può verificarsi uno dei seguenti errori comuni:
Le funzioni CreateObject e CoCreateInstance restituiscono uno dei seguenti messaggi di errore di runtime e non possono essere avviate per l'automazione.
Messaggio 1Nota
Errore di runtime "429": il componente ActiveX non può creare un oggetto
Messaggio 2
Nota
Errore di runtime "70": autorizzazione negata
Messaggio 3
Nota
CO_E_SERVER_EXEC_FAILURE (0x80080005): Esecuzione del server non riuscita
Messaggio 4
Nota
E_ACCESSDENIED (0x80070005): accesso negato
Quando si apre un documento di Office, viene visualizzato uno dei messaggi di errore seguenti.
Messaggio 1Nota
Errore di runtime '5981' (0x800A175D): Impossibile aprire l'archivio macro
Messaggio 2
Nota
Errore di runtime '1004': metodo '~' dell'oggetto '~' non riuscito
La funzione CreateObject e la funzione CoCreateInstance smettono di rispondere e non terminano mai o impiegano molto tempo per essere restituite. Su alcuni server, la creazione è veloce, ma nel registro eventi di Windows vengono visualizzati errori 1004 che indicano che l'applicazione è stata arrestata.
Alcune funzioni hanno esito negativo imprevisto o si bloccano indefinitamente a causa di un avviso utente o di un'altra finestra di dialogo che richiede l'attenzione dell'utente.
L'esecuzione di più richieste o test di stress causa l'esito negativo, l'interruzione della risposta del codice o l'arresto anomalo al momento della creazione o della chiusura di un'applicazione di Office. In questo caso, il processo viene lasciato in esecuzione in memoria e non può essere terminato oppure tutte le istanze dell'applicazione che viene automatizzata hanno esito negativo da quel momento in poi.
Oltre a quelli elencati in questo articolo, potrebbero tuttavia essere visualizzati altri problemi o messaggi che in genere si verificano in seguito ai cinque problemi principali elencati in precedenza in questo articolo.
Alternative all'automazione lato server
Microsoft consiglia vivamente agli sviluppatori di trovare alternative ad Automation of Office se devono sviluppare soluzioni lato server. A causa delle limitazioni apportate alla progettazione di Office, le modifiche apportate alla configurazione di Office non sono sufficienti a risolvere tutti i problemi. Microsoft consiglia vivamente una serie di alternative che non richiedono l'installazione di Office lato server e che possono eseguire le attività più comuni in modo più efficiente e rapido rispetto ad Automazione. Prima di includere Office come componente sul lato server nel progetto, prendere in considerazione alcune alternative.
La maggior parte delle attività di automazione lato server comporta la creazione o la modifica di documenti. Office 2007 supporta nuovi formati di file Open XML che consentono agli sviluppatori di creare, modificare, leggere e trasformare il contenuto dei file sul lato server. Questi formati di file usano lo spazio dei nomi System.IO.Package.IO in Microsoft .NET 3.x Framework per modificare i file di Office senza usare le applicazioni client di Office. Questo è il metodo consigliato e supportato per gestire le modifiche apportate ai file di Office da un servizio.
I formati di file Open XML sono uno standard pubblico.
Microsoft fornisce un SDK per la modifica dei formati di file Open XML da .NET 3.x Framework. Per ulteriori informazioni sull'SDK e su come usarlo per creare o modificare file Open XML, visitare i seguenti siti Web Microsoft Developer Network (MSDN):
Documentazione di Open XML SDK
Procedura: modificare documenti in formato Office Open XML
Manipolazione dei Files di Word 2007 con il modello a oggetti Open XML (Parte 1 di 3)
Modifica dei Files di Word 2007 con il modello a oggetti Open XML (Parte 2 di 3)
Manipolazione dei Files di Word 2007 con il modello a oggetti Open XML (Parte 3 di 3)
Modifica dei Files di Excel 2007 e PowerPoint 2007 con il modello a oggetti Open XML (Parte 1 di 2)
Modifica dei Files di Excel 2007 e PowerPoint 2007 con il modello a oggetti Open XML (Parte 2 di 2)
Quando si esegue il flusso di file Open XML da ASP o da ASP.NET, è necessario specificare il tipo MIME (Multipurpose Internet Mail Extension) corretto per il contenuto che si trasmette. Per un elenco dei tipi MIME per i file di Office 2007, visitare il seguente sito Web:
Formato di file di Office 2007 Tipi MIME per lo streaming di contenuto HTTP
Se la destinazione sono solo client precedenti a Office 2007 e non si desidera richiedere l'uso di Open XML nella soluzione, è possibile utilizzare altri formati di file di Office non binari, ad esempio HTML, XML e RTF. È quindi possibile trasmettere questi file a un client usando un tipo MIME in modo che il testo risultante venga visualizzato in Office. Il documento può essere modificato, salvato e persino restituito al server utilizzando ASP sul server.
Per ulteriori informazioni su questi argomenti e per vedere gli esempi che mostrano come implementarli, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportati di seguito:
198703 Come automatizzare Excel da un VBScript lato client
Come eseguire query e aggiornare i dati di Excel utilizzando ADO da ASP
286023 Come utilizzare un componente ActiveX VB per l'automazione Word da Internet Explorer
Se la propria azienda richiede la creazione lato server dei formati di file binari Office 97, Office 2000, Office XP e Office 2003, i fornitori di terze parti offrono componenti che possono aiutare. Microsoft non fornisce tali componenti, quindi dovrai creare una soluzione autonomamente o acquistarne una da un fornitore di terze parti. Sono disponibili molti prodotti di terze parti diversi. È necessario esaminare ogni soluzione per soddisfare al meglio il fornitore alle esigenze aziendali.
Se si desidera creare una soluzione personalizzata che modifichi direttamente i formati di file binari di Office 97, Office 2000, Office XP e Office 2003, è possibile ottenere gratuitamente le specifiche del formato di file in base alle condizioni di Microsoft Open Specification Promise (OSP). Non è disponibile alcun supporto tecnico per la documentazione o per i prodotti creati, ma la documentazione è disponibile.
Le soluzioni lato server potrebbero anche voler consentire agli utenti di caricare i file e quindi fare in modo che il server esegua il rendering dei file per la visualizzazione sul Web o su altri supporti. Microsoft sta lavorando per offrire tali funzionalità e fornisce una versione preliminare di questa funzionalità in Microsoft Excel Services.
Excel Services è una nuova tecnologia server inclusa in Microsoft Office Server SharePoint 2007 che consente di caricare, calcolare e visualizzare cartelle di lavoro di Excel in Microsoft Office Server SharePoint 2007. Per altre informazioni su Excel Services, visitare i seguenti siti Web Microsoft Developer Network (MSDN):
Procedura dettagliata: sviluppo di un'applicazione personalizzata con i servizi Web Excel
Creazione di applicazioni aziendali con formati Excel Services e Office Open XML Word Automation Services è una nuova applicazione di servizio in Server SharePoint 2010. Word Automation Services fornisce la conversione automatica sul lato server dei documenti in formati supportati dall'applicazione client Microsoft Word.
Panoramica di Word Automation Services
Introduzione a Word Automation Services È necessario valutare quale delle opzioni descritte in questo articolo si adatta alle proprie esigenze e come distribuire al meglio la soluzione. Non si garantisce che le informazioni contenute in questo articolo risolvano tutti i problemi per tutti i client. Ti invitiamo a testare accuratamente la soluzione prima di distribuirla.