Domanda

Per l'accesso ai dispositivi Windows CE dalla mia applicazione desktop ho usato DLL self-scritta. Questa DLL utilizzato RAPI chiamare funzioni necessarie sul lato del dispositivo. Tutto è stato bene lavora da anni.

Ma ora ho voluto usare questa DLL nel servizio di Windows. E non è riuscito. Messaggi mostra che è CeRapiInitEx () funzione che fallisce. E prima di guastarsi blocca per circa 5 secondi, anche se MSDN dice che è una funzione asincrono non bloccante. GetLastError () mi dà 1444L "identificatore filo non valido".

Qualcuno su internet ha detto che RAPARE non ha funzionato dal thread di servizio in ActiveSync 4. Anche se l'informazione è scarsa e frammentaria.

Qualcuno ha lo stesso problema o semplicemente avere qualcosa da dire? E 'vero che RAPARE non è accessibile dal servizio di Windows? Se è così, ci sono soluzioni alternative?

È stato utile?

Soluzione

Possibili soluzioni per questo problema:

  1. Downgrade ActiveSync per la versione 3.8 e dare il servizio permesso di interagire con il desktop (sistema uso Servizi applet per questo).
  2. Spawn un altro processo utente ( CreateProcessAsUser ) e usarlo come interstrato tra il servizio e RAPI (cioè, effettuare tutte le chiamate RAPI in questo processo).
  3. Creare un altro utente (non-service) applicazione, e usarlo come interstrato tra il servizio e RAPI (cioè, effettuare tutte le chiamate RAPI in questa applicazione).
  4. il codice di servizio Esegui come al solito (, console per esempio) applicazione.
  5. Passa da RAPI ad un'altra interfaccia per comunicare con il dispositivo, ad esempio TCP.

Ho scelto prima, personalmente, dal momento che è il più adatto nel mio caso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top