在Windows服务中使用RAPI

时间:2010-02-18 17:36:33

标签: windows-services rapi

为了从我的桌面应用程序访问Windows CE设备,我使用了自编写的DLL。 此DLL使用RAPI在设备端调用必要的功能。一切都运作良好多年。

但是现在我想在Windows服务中使用这个DLL。它失败了。 Debug显示CeRapiInitEx()函数失败。在失败之前它会阻塞大约5秒,尽管MSDN说这是一个异步非阻塞功能。 GetLastError()给了我1444L“无效的线程标识符”。

互联网上有人提到RAPI无法在ActiveSync 4中的服务线程中运行。虽然信息很差并且很有争议。

有没有人有同样的问题或只是有话要说?是不是从Windows服务无法访问RAPI?如果是,有任何解决方法吗?

1 个答案:

答案 0 :(得分:1)

此问题的可能解决方案:

  1. 将ActiveSync降级到版本3.8并授予服务与桌面交互的权限(为此使用系统服务小程序)。
  2. 生成另一个用户进程(CreateProcessAsUser)并将其用作服务和RAPI之间的中间层(即,在此过程中进行所有RAPI调用)。
  3. 创建另一个用户(非服务)应用程序,并将其用作服务和RAPI之间的中间层(即,在此应用程序中进行所有RAPI调用)。
  4. 像往常一样运行服务代码(例如,控制台)应用程序。
  5. 从RAPI切换到另一个接口以与设备通信,例如TCP。
  6. 我个人选择了第一名,因为在我的情况下这是最合适的。