Question

Pour accéder aux périphériques Windows CE de mon application de bureau je DLL auto-écrit. Cette DLL utilisée RAPI pour appeler les fonctions nécessaires sur le côté de l'appareil. Tout a travaillé très bien depuis des années.

Mais maintenant, je voulais utiliser cette DLL dans Windows. Et il a échoué. Debug montre qu'il est fonction CeRapiInitEx () qui échoue. Et avant d'échouer il bloque pendant environ 5 secondes, bien que MSDN dit est une fonction asynchrone non-bloquant. GetLastError () me donne 1444L "identifiant de thread non valide".

Quelqu'un sur Internet a mentionné que RAPI n'a pas de fils de service dans ActiveSync 4. Bien que l'information est pauvre et décousu.

Quelqu'un at-il le même problème ou tout simplement quelque chose à dire? Est-il vrai que RAPI est pas accessible depuis le service Windows? Si oui, y at-il des solutions de contournement?

Était-ce utile?

La solution

Les solutions possibles pour ce problème:

  1. Downgrade ActiveSync à la version 3.8 et de donner l'autorisation d'interagir avec un service bureau (système d'utilisation des services applet pour cela).
  2. Spawn un autre processus utilisateur ( CreateProcessAsUser ) et l'utiliser comme intermédiaire entre le service et RAPI (c.-à-faire tous les appels RAPI dans ce processus).
  3. Créer un autre utilisateur de l'application (non-service), et l'utiliser comme intermédiaire entre le service et RAPI (à savoir, faire tous les appels RAPI dans cette application).
  4. Run code de service que l'application habituelle (par exemple, la console).
  5. Commutateur de RAPI à une autre interface pour communiquer avec un dispositif, par exemple, TCP.

J'ai choisi 1er, personnellement, car il est le plus approprié dans mon cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top