【问题标题】:Using RAPI in Windows Service在 Windows 服务中使用 RAPI
【发布时间】:2011-01-18 10:42:35
【问题描述】:

为了从我的桌面应用程序访问 Windows CE 设备,我使用了自写的 DLL。 该 DLL 使用 RAPI 在设备端调用必要的函数。多年来一切都运行良好。

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

互联网上有人提到 RAPI 在 ActiveSync 4 中的服务线程中不起作用。虽然信息很差而且零碎。

有没有人有同样的问题或只是有话要说?是否确实无法从 Windows 服务访问 RAPI?如果是这样,有什么解决方法吗?

【问题讨论】:

    标签: windows-services rapi


    【解决方案1】:

    这个问题的可能解决方案:

    1. 将 ActiveSync 降级到 3.8 版并授予服务与桌面交互的权限(为此使用系统服务小程序)。
    2. 生成另一个用户进程 (CreateProcessAsUser) 并将其用作服务和 RAPI 之间的中间层(即,在此进程中进行所有 RAPI 调用)。
    3. 创建另一个用户(非服务)应用程序,并将其用作服务和 RAPI 之间的中间层(即,在此应用程序中进行所有 RAPI 调用)。
    4. 照常运行服务代码(例如控制台)应用程序。
    5. 从 RAPI 切换到另一个接口与设备通信,例如TCP。

    我个人选择了第一个,因为它最适合我的情况。

    【讨论】:

      猜你喜欢
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 2014-12-23
      • 2014-06-24
      • 2020-06-10
      相关资源
      最近更新 更多