2008-11-15 20 views
6

Utilizamos objetos COM para acceder a hojas de cálculo de Excel en un servicio NT (a través del servidor de secuencias de comandos de Windows). Antes de Vista, esto funcionó muy bien, pero comenzando con Vista, recibimos este error:Acceso a archivos desde el objeto COM de Excel falla cuando se ejecuta desde el servicio NT en Vista

Microsoft Office Excel no puede acceder al archivo 'c: \ myfiles \ test.xls'. Hay varias razones posibles:

  • El nombre o la ruta del archivo no existe.
  • El archivo está siendo utilizado por otro programa.
  • El libro de trabajo que está intentando guardar tiene el mismo nombre que un libro abierto actualmente.

He intentado cambiar la configuración de inicio de sesión del servicio NT para usar mi propia cuenta, una cuenta de administrador y un sistema local. Revisé la Política de seguridad local y no encontré nada. Pasé días buscando en Microsoft KB inútilmente.

Si el script se ejecuta desde una aplicación de consola, funciona bien. El archivo se abre y se procesa sin problemas. El error solo ocurre cuando se ejecuta desde el contexto de un servicio.

Si el servicio se ejecuta en Windows XP o Server 2003 SP1, también funciona bien. Solo en Vista falla (¡y ahora hemos recibido informes de fallas en Server 2003 SP2)!

El código, por lo que vale es excepcionalmente simple:

dim xl_app 
Set xl_app = CreateObject("Excel.Application") 
xl_app.Workbooks.Open mypath,0,1 

sospecho que esta persona podría estar experimentando el mismo problema: http://bytes.com/forum/thread819740.html

+0

¿Puede abrir el archivo de Excel en el servicio con la API Win32 regular (es decir, CreateFile?) –

+0

¿En qué idioma está escrito el servicio? ¿Cómo invocas el host de scripting? –

Respuesta

1

sólo algunas preguntas adicionales:

  • ¿Qué versión de Excel estás usando?
  • ¿Ha intentado ejecutar el servicio con privilegios elevados?
0

Tengo "tipo de" resuelto este problema. Si usa "dcomcnfg" para cambiar la cuenta para iniciar la aplicación de Excel en una cuenta de usuario o "usuario interactivo", el excel lanzado desde el servicio comienza en esa cuenta y ahora puede acceder al sistema de archivos.

El problema es que esta es una configuración global. Si usa: * "este usuario": entonces excel SIEMPRE se abre con ese usuario Y siempre se abre sin interfaz de usuario en la sesión 0, incluso para el uso interactivo de Excel. IE siempre es invisible. * "Usuario interactivo": Ahora Excel siempre se inicia en el usuario interactivo, lo que no creo que funcione para un servicio que se iniciará al iniciarse con NINGÚN usuario interactivo.

Debe haber alguna configuración de seguridad en esto. Espero que otros tengan otras ideas.

+0

@davidNelson habló sobre esto, pero aquí hay un tutorial sobre cómo solucionar este problema. Trabajó para mi. http://bytes.com/topic/c-sharp/answers/819740-c-service-excel-application-workbooks-open-fails-when-called-service#post3466746 –

Cuestiones relacionadas