1

デスクトップ アプリケーションから Windows CE デバイスにアクセスするために、私は自分で作成した DLL を使用しました。この DLL は、デバイス側で必要な関数を呼び出すために RAPI を使用していました。何年もの間、すべてがうまく機能しています。

しかし今、この DLL を Windows サービスで使用したいと考えました。そして、それは失敗しました。デバッグは、失敗したのは CeRapiInitEx() 関数であることを示しています。また、失敗する前に約 5 秒間ブロックしますが、MSDN は非同期の非ブロック関数であると述べています。GetLastError() で 1444L "Invalid thread identifier" が表示されます。

インターネット上の誰かが、ActiveSync 4 のサービス スレッドから RAPI が機能しないと述べました。

誰かが同じ問題を抱えているか、何か言いたいことがありますか? Windows サービスから RAPI にアクセスできないというのは本当ですか? もしそうなら、回避策はありますか?

4

1 に答える 1

1

この問題の可能な解決策:

  1. ActiveSync をバージョン 3.8 にダウングレードし、サービスにデスクトップと対話する権限を与えます (これにはシステム サービス アプレットを使用します)。
  2. 別のユーザー プロセス ( CreateProcessAsUser ) を生成し、それをサービスと RAPI の間の中間層として使用します (つまり、このプロセスですべての RAPI 呼び出しを行います)。
  3. 別のユーザー (非サービス) アプリケーションを作成し、それをサービスと RAPI の間の中間層として使用します (つまり、このアプリケーションですべての RAPI 呼び出しを行います)。
  4. サービス コードを通常どおり (コンソールなど) アプリケーションで実行します。
  5. デバイスと通信するために、RAPI から別のインターフェイス (TCP など) に切り替えます。

個人的には 1st を選択しました。これが私の場合に最も適しているからです。

于 2010-02-19T15:36:27.870 に答える