Pregunta

Para acceder a dispositivos Windows CE desde mi aplicación de escritorio utilicé una DLL autoescrita.Esta DLL utilizó RAPI para llamar a las funciones necesarias en el lado del dispositivo.Todo funciona bien desde hace años.

Pero ahora quería usar esta DLL en el servicio de Windows.Y fracasó.La depuración muestra que es la función CeRapiInitEx() la que falla.Y antes de fallar se bloquea durante unos 5 segundos, aunque MSDN dice que es una función asíncrona sin bloqueo.GetLastError() me da 1444L "Identificador de hilo no válido".

Alguien en Internet mencionó que RAPI no funcionaba desde subprocesos de servicio en ActiveSync 4.Aunque la información es pobre y fragmentaria.

¿Alguien tiene el mismo problema o simplemente tiene algo que decir?¿Es cierto que no se puede acceder a RAPI desde el servicio de Windows?Si es así, ¿hay alguna solución?

¿Fue útil?

Solución

Las posibles soluciones para este problema:

  1. Downgrade ActiveSync a la versión 3.8 y dar el servicio permiso para interactuar con el escritorio (Servicios del sistema de utilización del applet para esto).
  2. frezar otro proceso de usuario ( CreateProcessAsUser ) y utilizarlo como capa intermedia entre el servicio y RAPI (es decir, hacer que todas las llamadas RAPI en este proceso).
  3. Crear otro usuario (no-servicio) de aplicación, y utilizarlo como capa intermedia entre el servicio y RAPI (es decir, hacer que todas las llamadas RAPI en esta aplicación).
  4. código de servicio Ejecutar como (por ejemplo, la consola) de aplicación habitual.
  5. Cambiar desde RAPI a otro interfaces para comunicarse con el dispositivo, por ejemplo, TCP.

He elegido primero, en lo personal, ya que es la más adecuada en mi caso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top