2009-12-30 40 views
12

Antecedentes:
Tosté mi viejo disco duro en el trabajo y estoy obteniendo uno nuevo. Con eso tendré que reconstruir mi máquina. Mi gerente tiene Windows 7 instalado en su laptop Loaner que he estado usando mientras mi máquina está fuera de servicio. Pero me he encontrado con un problema.Windows 7 .net Excel .SaveAs() Error Excepción de HRESULT: 0x800A03EC

Tenemos un buen número de aplicaciones que hacen uso de la referencia Microsoft.Office.Interop.Excel. He superado algunos errores hasta ahora, pero en el que me he quedado atrapado durante los últimos días (mi máquina en realidad sufrió una falla en el disco duro después de la primera reconstrucción) y no pude encontrar una solución. He buscado este error pero no puedo encontrar a nadie que tenga este problema en Windows 7, aunque he intentado con otras soluciones para Windows Server 2008 en vano.

Si no puedo solucionar este problema, no podré usar Windows 7 y me gustaría saberlo antes de reconstruir una máquina solo para tener que limpiarla y comenzar de nuevo (por tercera vez).

Problema:
SO: Windows 7 Enterprise
Mensaje de error: Excepción de HRESULT: 0x800A03EC
Código:

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) 

El error se produce en la línea final.

Lo que he probado hasta ahora:

  1. Cambio de la AppPool para utilizar la cuenta NetworkService (era 'ApplicationPoolIdentity', que me no pude encontrar en la lista de usuarios en la configuración de seguridad ) . A continuación, otorgue a la cuenta NetworkService acceso completo a la carpeta apropiada.
  2. Acceso de NetworkService a la configuración de todos 'Microsoft Excel Application' en DCOMCNFG
  3. ejecución de esta orden "appcmd set config -section: -enableParentPaths asp: true", porque es la única otra cosa que pude encontrar
  4. Utilizando el. SaveCopyAs() que funcionó pero causó errores diferentes

Solo quería ver si alguien más se ha topado con esto o no desde que Windows 7 es nuevo. Puedo ir con Server 2008 pero me gustaría tener un razonamiento sólido detrás de esto antes de decirle a mi gerente que no funcionará.

Gracias, Jeff

+0

Yo recomendaría el uso de http://download.cnet.com/Filemon/3000-2094_4-10020837.html. FileMon, puede decirle lo que está escribiendo aquí. ** SaveAs ** parece un bloqueo o un problema de autenticación. Indique si necesita más información ... –

+0

¿Este enlace ayuda en lo absoluto? http://www.made4dotnet.com/Default.aspx?tabid=141&aid=15 – shahkalpesh

+0

@shahkalpesh: Gracias sí, lo miré antes, pero no aborda mi problema. –

Respuesta

15

Nota: Esto necesita ser condensado un poco, ya que es una compilación de todas las correcciones que he estado haciendo en nuestro wiki interno pero no estoy seguro de qué subconjunto de cambios lo hizo funcionar así que lo incluiré todo .

Solución:

Los siguientes cambios pueden ser un superconjunto de la forma de abordar este problema.

-Ejecute DCOMCNFG.exe y navegue hasta 'Servicios de componentes> Computadoras> Mi PC'.
-Haga clic en 'Mi PC' y haga clic en 'Propiedades'.
-Abra la pestaña 'Seguridad COM'. Agregue su cuenta para cada uno de los botones enumerados (botones 'Editar límites ...' y 'Editar predeterminado ...' en 'Permiso de acceso' & 'Iniciar y activar permisos'). Proporcione a su cuenta todas las opciones de acceso. Haga clic en "Aplicar" y luego en "Aceptar".
-Mientras todavía está en DCOMCNFG expanda el enlace 'Mi PC' y abra la carpeta 'DCOM Config'.
-Haga clic en 'Aplicación de Microsoft Excel' y seleccione 'Propiedades'.
-En la pestaña 'Seguridad', seleccione la opción 'Personalizar' para 'Permisos de inicio y activación' y 'Permisos de configuración'. Para ambos haga clic en el botón 'Editar ...'. Dale acceso a tu cuenta a todo.
-Mientras todavía en 'Propiedades' para 'Aplicación de Microsoft Excel' vaya a la pestaña 'Identidad'.
: seleccione la opción 'El usuario interactivo'.
-Haga clic en 'Aplicar' y luego 'Aceptar'.
-Reinicie su computadora.

-Trate el siguiente DCOMCNFG & cambio ApplicationPoolIdentity.

-Ejecuta el símbolo del sistema como administrador.
-navega a C: \ Windows \ System32 \ inetsrv> y ejecutar 'appcmd set config -section: -enableParentPaths asp: true'

Como alternativa se puede utilizar .SaveCopyAs(), aunque esto todavía no puede resolver el problema y requerirá cambios de código.

DCOMCNFG para Windows 7:

Este error ocurre en 'Excel aplicación = nueva aplicación();' llama

Detalles Este enlace de cómo solucionar el problema para XP/Server 2003, pero se puede adaptar a Windows 7: http://blog.crowe.co.nz/archive/2006/03/02/589.aspx

no tengo/no pudo encontrar una cuenta 'ASPNET'. Debe verificar el grupo de aplicaciones para saber cómo se está ejecutando la aplicación.
Para hacerlo, vaya a 'Administración de equipos> Servicios y aplicaciones> Servicios de Internet Information> Grupos de aplicaciones'
Haga clic derecho en el AppPool apropiado y seleccione 'Configuración avanzada'. En 'Identidad del modelo de proceso', puede encontrar la cuenta bajo la que se ejecuta. El mío era 'ApplicationPoolIdentity' que tampoco pude encontrar, así que lo cambié a 'Servicio de red' como Windows Server 2003.
Una vez que esto esté configurado, ejecute DCOMCNFG.exe. Vaya a 'Servicios de componentes> Computadoras> Mi PC> Configuración DCOM'.
Busque y haga clic derecho en 'Aplicación Microsoft Excel' y seleccione 'Propiedades'. Elija la pestaña 'Seguridad'. En "Permisos de lanzamiento y activación", seleccione "Personalizar" y haga clic en "Editar".
Luego haga clic en el botón 'Agregar ...'.
Escriba el nombre de la cuenta apropiada, en este caso 'Servicio de red' y haga clic en 'Comprobar nombres'. A continuación, haz clic en "Aceptar".
De vuelta en la página 'Permisos de inicio y activación', resalte la cuenta 'Servicio de red' y marque las casillas de verificación 'Inicio local' y 'Activación local'. A continuación, haz clic en "Aceptar".

+0

¿Alguien sabe si esto es un capricho de Win 7, o Jeff solo tiene un conjunto muy específico de condiciones que conducen a esto? También estoy luchando con un error de salvar como. – pc1oad1etter

+0

A partir de hoy, esta sigue siendo la única forma que conozco de manejar esto y el resto de mi equipo que está en Server 2008 (también Windows 6.1) también está usando esto para manejarlo. Me encantaría escuchar que hay una mejor manera. –

+8

Para Windows 7 de 64 bits, inicie DCOMCNFG en modo de 32 bits con: DCOMCNFG -32 De lo contrario, no verá la aplicación Microsoft Excel en la lista. –

0

asegurarse de que está ejecutando el programa (y EXCEL.EXE) como administrador, y el directorio que está ahorrando al no tener "sólo lectura" atributo en.

Además, intente pasar la ruta completa del archivo en lugar de solo el nombre del archivo.

También podría intentar pasar System.Reflection.Missing.Value en lugar de omitir los parámetros opcionales.

No se me ocurre nada en este momento. Espero que esto ayude.

ShdNx

+0

Mi cuenta es un administrador en la máquina y cuando ejecuto VS se ejecuta como administrador. Comprobé el proceso excel.exe y se estaba ejecutando como NetworkService al que he dado acceso a ese directorio. También Me.FilePath es el directorio completo. Probé el Missing.Value pero obtuve el mismo error, así que desafortunadamente, aunque todas eran buenas ideas, todavía estoy atascado. ¡Gracias! –

3

Cuando estaba consiguiendo este error, creo que empecé a usar.SaveCopyAs en lugar de SaveAs. No estoy seguro de qué otros errores esto te está causando, si pudieras elaborar allí quizás algo podría resolverse para esa situación.

Además, una cosa que está haciendo es muy probable que cause que excel.exe permanezca en la memoria después de procesar un archivo. Aquí hay un artículo que muestra la forma correcta de usar y liberar objetos de interoperabilidad COM (http://support.microsoft.com/kb/317109). Es un dolor, pero funcionó para mí al permitir que esos recursos se lanzaran antes de que la aplicación se cerrara.

+0

También debería tener en cuenta que estaba teniendo problemas con esto también en Vista, y parecía estar relacionado con tener una versión más nueva de Office, en lugar de la versión de Windows (también podía volver a crear en máquinas XP, pero no en algunas versiones anteriores de los ensamblados de interoperabilidad) –

+0

Rick, mi problema con .SaveCopyAs es reparable porque podría modificar el código. Mi problema con eso es, por supuesto, que este no es el único lugar donde usamos esto, así que constantemente tendría que cambiar el código, así que si esa es la única solución, probablemente no sea algo que busque. Sabemos acerca de la liberación de Excel.exe y tratamos de liberarlo (aunque de vez en cuando voy al servidor y tengo que matar algunos). Así que estoy de acuerdo, aunque este no es el mejor método, sería una tarea importante para nosotros cambiarlo ahora y eso dependería de mi gerente, ya sea que tengamos los recursos. –

+0

Claro, solo quería que apareciera porque me encontré con él, y tuve que pasar por el problema de averiguar qué estaba pasando. Intenté durante varias horas para que la función SaveAs() funcionara sin errores, y nunca encontré ninguna combinación de parámetros que no generara errores. Si no puede usar SaveCopyAs(), no estoy seguro de cuál podría ser el mejor enfoque. ¡Buena suerte! –

0

La respuesta anterior de Jeff Keslinke terminó trabajando para mí. También necesita ver el grupo de aplicaciones que utiliza su aplicación y asegurarse de que la identidad sea correcta y tenga acceso completo y privilegios.

0

Recibí el mismo problema y encontré errores de bloqueo de la aplicación con el código de excepción: 0xc0000005 en eventos de Windows. Busque en la web y busque la siguiente solución en el enlace Excel 2010 Crash, Exception code: 0xc0000005 Cambie el nombre de la extensión del archivo abierto de xlsx a zip. La solución funciona para mi caso.

Cuestiones relacionadas