¿Por qué Excel no puede abrir un archivo cuando se ejecuta desde el programador de tareas?

14

Escribí un script de PowerShell que abre un libro de Excel y ejecuta una macro. Cuando ejecuto ese script desde la consola PS, o incluso desde la línea de comandos usando powershell.exe script.ps1, simplemente funciona. Cuando configuro una tarea desde el programador de tareas de Windows, genera una excepción sobre ese archivo de Excel, diciendo que no existe o que ya está en uso.

El archivo existe con seguridad, ya que el script se ejecutó bien desde la línea de comandos, y estoy seguro de que no está en uso.

Traté de mover el archivo de Excel a un área local y no privilegiada, para evitar problemas de confianza de red / privilegios de administrador. La tarea aún se ejecuta con los más altos privilegios. La ruta no tiene espacios ni caracteres especiales.

Cuando intento acceder al archivo usando un objeto del sistema de archivos, no hay errores incluso cuando se ejecuta desde el planificador, por lo que supongo que es específico del Excel.Application.Workbooks.Open("..")método.

¿Qué debo considerar ahora?

zrz
fuente
1
¿Qué cuenta de usuario se usa para ejecutar la tarea programada?
Massimo
Usé la cuenta de administrador de dominio, y parecía ser el problema. El uso del grupo de administradores de dominio funcionó. Pero ahora tenía que encontrar por qué la autorización de acceso DCOM tiene un problema con la cuenta de administrador de dominio.
zrz
tl; dr: la solución en la respuesta de Eric es efectiva , pero no es compatible ; consulte este artículo de soporte de Microsoft . Es mejor buscar alternativas como el paquete nuget DocumentFormat.OpenXml .
mklement0

Respuestas:

8

Es probable que sea un problema de permisos DCOM. La automatización de Excel a veces está llena de peligros ...

La única forma en que he encontrado problemas como este es configurar Excel para que se ejecute como un usuario específico a través de permisos DCOM.

  1. Servicios de componentes abiertos (Inicio -> Ejecutar, escriba dcomcnfg)
  2. Acceda a Servicios de componentes -> Computadoras -> Mi PC y haga clic en Configuración DCOM
  3. Haga clic derecho en la aplicación Microsoft Excel y seleccione Propiedades
  4. En la pestaña Identidad, seleccione Este usuario e ingrese el ID y la contraseña de una cuenta de usuario interactiva (dominio o local) y haga clic en Aceptar

Desafortunadamente, mantenerlo como el usuario interactivo o el inicio no funciona con el programador de tareas, incluso cuando configura la tarea para que se ejecute en una cuenta que tiene acceso de administrador a la máquina.

squillman
fuente
1
Gracias por señalar dcomcnfg. Tuve que agregar manualmente la Aplicación de Excel en el Registro para poder verla en dcomcnfg, luego intenté cambiar la configuración de identidad pero tampoco funcionó. Desde dcomcnfg, busqué en Autorización de acceso: el Administrador de dominio estaba en la lista y tenía acceso local y remoto, pero había un pequeño cartel rojo (cruz blanca dentro de un disco rojo) sobre su icono. No tengo idea de por qué, pero de alguna manera hay un problema con la cuenta de administrador de dominio. Agregar la cuenta de grupo Administradores de dominio y ejecutar la tarea desde ese grupo es una solución alternativa.
zrz
Microsoft no admite la ejecución de componentes COM de Office en sesiones no interactivas; consulte support.microsoft.com/en-us/help/257757/… . La respuesta de Eric es una solución efectiva actualmente, pero no es compatible.
mklement0
Esta respuesta podría mejorarse cubriendo cómo agregar entradas de la aplicación Microsoft Excel cuando faltan por completo en la configuración de DCOM. Ver docs.microsoft.com/en-us/archive/blogs/… Además, FWIW, esto no resolvió mi problema. Todavía aparece un proceso de Excel en el Administrador de tareas, pero el archivo especificado nunca se abre / ejecuta.
TylerH
Del mismo modo, después de realizar este cambio, me impidió ejecutar o incluso abrir archivos VBA de Excel / el editor VBA, causando CTD cada vez que lo intento.
TylerH
42

Crea estas dos carpetas:

32Bit:

C:\Windows\System32\config\systemprofile\Desktop  

64Bit:

C:\Windows\SysWOW64\config\systemprofile\Desktop

Excel necesita estas carpetas si no se ejecuta de forma interactiva. Cree ambas carpetas incluso si está en un sistema operativo de 64 bits.

eric
fuente
3
Solo quiero agregar que Microsoft no respalda la ejecución de ningún componente de Office de manera no interactiva, pero es posible evitarlo en muchos casos.
flindeberg
8
Esto es algo de magia negra seria. No sé qué es más aterrador: que Excel necesitaba esta carpeta en este escenario o que alguien sabía que Excel necesitaba esta carpeta en este escenario.
Rich C
1
Para enfatizar el punto de @ flindeberg: esta solución es efectiva , pero no es compatible ; consulte este artículo de soporte de Microsoft .
mklement0
La creación de estas carpetas y la asignación de Control total para mi cuenta (que también es la cuenta que ejecuta la tarea programada) desde system32 / SysWOW64 a las carpetas de escritorio todavía no funcionó para mí.
TylerH
2

Al configurar permisos DCOM, si Microsoft Excel no aparece en dcomcnfgtrymmc comexp.msc /32

referencia

cmo
fuente
Esto hizo que DCOM Config se abriera para mí y me preguntó si quería registrar un par de entradas, pero Excel no estaba entre ellas.
TylerH