Windows 7 .net Excel .SaveAs () Eccezione di errore da HRESULT: 0x800A03EC

Sfondo:
Ho tostato il mio vecchio disco rigido al lavoro e ne sto facendo uno nuovo. Con quello dovrò ribuild la mia macchina. Il mio manager ha installato Windows 7 sul suo laptop in prestito che ho utilizzato mentre la mia macchina è fuori servizio. Ma ho incontrato un problema.

Abbiamo un buon numero di app che utilizzano il riferimento Microsoft.Office.Interop.Excel. Ho superato alcuni errori fino ad ora ma quello su cui sono stato bloccato per gli ultimi giorni (la mia macchina ha effettivamente sofferto il guasto del disco rigido dopo la prima ricostruzione) e non sono stato in grado di trovare una soluzione. Ho cercato questo errore ma non riesco a trovare nessuno che abbia questo problema su Windows 7, anche se ho provato altre correzioni per Windows Server 2008 senza alcun risultato.

Se non riesco a risolvere questo problema, non sarà in grado di utilizzare Windows 7 e vorrei sapere che prima di ribuild una macchina solo per doverlo cancellare e ricominciare (per la terza volta).

Problema:
Sistema operativo: Windows 7 Enterprise
Messaggio di errore: Eccezione da HRESULT: 0x800A03EC
Codice:

Private m_xls As Microsoft.Office.Interop.Excel.Application Private m_wkbk As Microsoft.Office.Interop.Excel.Workbook Private m_wksht As Microsoft.Office.Interop.Excel.Worksheet m_xls = New Application m_xls.Visible = False : m_xls.DisplayAlerts = False m_wkbk = m_xls.Workbooks.Open(Me.FilePath) m_wksht = CType(m_wkbk.ActiveSheet, Worksheet) '...Write some data...' m_wkbk.SaveAs(Me.FilePath, XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, False, False, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value) 

L’errore si verifica sulla linea finale.

Quello che ho provato finora:

  1. Modifica dell’appPool per utilizzare l’account NetworkService (era ‘ApplicationPoolIdentity’ che non riuscivo a trovare nell’elenco degli utenti nelle impostazioni di sicurezza). Quindi, concedere all’account NetworkService l’accesso completo alla cartella appropriata.
  2. Fornire accesso a NetworkService a tutte le impostazioni di “Applicazione Microsoft Excel” in DCOMCNFG
  3. Eseguendo questo comando “appcmd set config -section: asp -enableParentPaths: true” perché è l’unica altra cosa che potrei trovare
  4. L’utilizzo di .SaveCopyAs () ha funzionato, ma ha causato errori diversi

Volevo solo vedere se qualcun altro si è imbattuto in questo o no da quando Windows 7 è nuovo. Posso andare con Server 2008, ma mi piacerebbe avere un solido ragionamento dietro di esso prima di dire al mio manager che non funzionerà.

Grazie, Jeff

Nota: questo deve essere un po ‘condensato in quanto è una raccolta di tutte le correzioni che ho apportato sulla nostra wiki interna, ma non sono sicuro di quale sottoinsieme di modifiche abbia funzionato, quindi includerò tutto.

Soluzione:

Le seguenti modifiche possono essere un superset di come affrontare questo problema.

-Eseguire DCOMCNFG.exe e accedere a “Servizi componenti> Computer> Risorse del computer”.
-Fare clic destro ‘Risorse del computer’ e fare clic su ‘Proprietà’.
-Aprire la scheda ‘Sicurezza COM’. Aggiungi il tuo account per tutti i pulsanti elencati (“Modifica limiti …” e “Modifica predefiniti …” in “Autorizzazione di accesso” e “Avvia e triggers autorizzazioni”). Dai al tuo account tutte le opzioni di accesso. Fare clic su “Applica”, quindi su “OK”.
-Mentre ancora in DCOMCNFG, espandere il collegamento “Risorse del computer” e aprire la cartella “DCOM Config”.
-Fare clic su ‘Applicazione Microsoft Excel’ e selezionare ‘Proprietà’.
-Under la scheda ‘Sicurezza’ scegliere l’opzione ‘Personalizza’ per ‘Autorizzazioni di avvio e triggerszione’ e ‘Permessi di configurazione’. Per entrambi fare clic sul pulsante “Modifica …”. Dai al tuo account l’accesso a tutto.
-Mentre ancora nelle ‘Proprietà’ per ‘Microsoft Excel Application’ vai alla scheda ‘Id quadro’.
-Seleziona l’opzione ‘L’utente interattivo’.
-Fare clic su ‘Applica’, quindi su ‘OK’.
-Riavvia il tuo computer.

-Prova la seguente modifica DCOMCNFG e ApplicationPoolIdentity.

-Run comando richiesto come amministratore.
-Navigare in c: \ Windows \ System32 \ inetsrv> ed eseguire ‘appcmd set config -section: asp -enableParentPaths: true’

In alternativa è ansible utilizzare .SaveCopyAs () anche se questo potrebbe non risolvere il problema e richiederà modifiche al codice.

DCOMCNFG Per Windows 7:

Questo errore si verifica in “Excel app = Nuova applicazione ();” chiamate

Questo collegamento spiega come risolvere il problema per XP / Server 2003, ma può essere adattato a Windows 7: http://blog.crowe.co.nz/archive/2006/03/02/589.aspx

Non ho / non sono riuscito a trovare un account ‘ASPNET’. Devi controllare il pool di applicazioni per scoprire come funziona l’app.
Per farlo, vai su “Gestione computer> Servizi e applicazioni> Internet Information Services> Pool di applicazioni”
Fare clic con il tasto destro del mouse sull’appPool appropriato e selezionare “Impostazioni avanzate”. Sotto “Modello di processo> Id quadro” puoi trovare l’account in cui è in esecuzione. Il mio era “ApplicationPoolIdentity” che non riuscivo a trovare, quindi l’ho cambiato in “Servizio di rete” come Windows Server 2003.
Una volta impostato, eseguire DCOMCNFG.exe. Passare a “Servizi componenti> Computer> Risorse del computer> Config DCOM”.
Trova e clicca con il tasto destro su “Microsoft Excel Application” e seleziona “Proprietà”. Scegli la scheda ‘Sicurezza’. Sotto “Autorizzazioni di avvio e triggerszione” scegli “Personalizza” e fai clic su “Modifica”.
Quindi fare clic sul pulsante “Aggiungi …”.
Digitare il nome dell’account appropriato, in questo caso “Servizio di rete” e fare clic su “Controlla nomi”. Quindi fare clic su ‘OK’.
Tornando alla pagina “Autorizzazioni di avvio e triggerszione” evidenziare l’account “Servizio di rete” e selezionare le caselle di controllo “Avvio locale” e “Attivazione locale”. Quindi fare clic su ‘OK’.

Quando ho ricevuto questo errore, penso di aver iniziato a utilizzare. SaveCopyAs anziché SaveAs. Non sono sicuro di quali altri errori ti stiano causando, se tu potessi elaborare lì forse qualcosa potrebbe essere capito per quella situazione.

Inoltre, una cosa che stai facendo è molto probabilmente la causa di excel.exe che rimane in memoria dopo l’elaborazione di un file. Ecco un articolo che mostra il modo corretto di utilizzare e rilasciare oggetti di interoperabilità COM ( http://support.microsoft.com/kb/317109 ). È un dolore, ma ha funzionato nel consentire che tali risorse vengano rilasciate prima che l’app venisse chiusa.

Assicurati di eseguire il programma (e EXCEL.EXE) come amministratore e la directory su cui stai salvando non ha attributo “sola lettura”.

Inoltre, prova a passare il percorso completo del file anziché solo il nome del file.

Si potrebbe anche provare a passare System.Reflection.Missing.Value invece di omettere i parametri facoltativi.

Non riesco a pensare ad altro in questo momento. Spero che questo ti aiuti.

ShdNx

La risposta di cui sopra da Jeff Keslinke ha finito per funzionare per me. È inoltre necessario esaminare il pool di applicazioni utilizzato dall’app e accertarsi che l’id quadro sia corretta e che disponga di accesso e privilegi completi.

Ho avuto lo stesso problema e ho riscontrato errori di crash dell’applicazione con codice di eccezione: 0xc0000005 in eventi di Windows. Cerca nel web e trova la seguente soluzione al link Crash di Excel 2010, codice di eccezione: 0xc0000005 Rinomina l’estensione del file aperto da xlsx a zip. La soluzione funziona per il mio caso.

Prova ad triggersre la ISS. I dettagli sono menzionati qui per Windows 7

http://helpdeskgeek.com/windows-7/turn-on-microsoft-internet-information-services-in-windows-7/