【问题标题】:Ensuring Windows Mobile application is not running - From a desktop app确保 Windows Mobile 应用程序未运行 - 从桌面应用程序
【发布时间】:2010-10-30 00:58:59
【问题描述】:

我有一个 Windows Mobile 5.0 应用程序(智能手机),它包含一个平面数据文件 (CSV),其中包含一个标题行(两个双精度)和一个条目列表(两个双精度、日期时间和一个字符串)。

有时,我需要将移动应用程序与桌面应用程序“同步”。桌面应用程序应从移动设备读取 CSV,并根据旧文件的内容将其替换为新的 CSV 文件。

通过 RAPI(我猜)这似乎很容易,但我需要确保移动应用程序没有运行。有没有办法做到这一点?

互斥体?远程进程查看器之类的东西?文件锁定?

感谢您的帮助

迈克

【问题讨论】:

    标签: c# windows-mobile compact-framework


    【解决方案1】:

    只需对正在读取/更新的文件使用简单的文件锁定机制。

    在使用前重命名文件或创建第二个“锁定”文件,您可以检查它是否存在。

    【讨论】:

    • 如果应用程序崩溃并且不删除文件?
    • 是的,锁定文件有时间限制。如果锁定已存在 2 分钟,但任何应用都不应持有超过一分钟的锁定,请忽略该锁定。
    【解决方案2】:

    无论出于何种原因,built-in RAPI Functions 没有任何东西可以检查像ToolHelp API's 这样的正在运行的进程。使用 C,您可以在调用 ToolHelp API 的设备库中创建一组自定义函数,然后通过 CeRapiInvoke(这是自定义 RAPI 函数的通用包罗万象的入口点)调用。不幸的是,在托管代码中没有简单的机制可以做到这一点。

    【讨论】:

      【解决方案3】:

      刚刚想到一个简单的方法。

      程序每运行 3 秒,使用当前日期时间更新一个注册表项。

      当我要同步时,检查移动注册表,5 秒后再次检查。如果值发生变化,程序仍在运行。

      【讨论】:

      • 这将是一个非常糟糕的主意。让移动应用程序以这样的频率执行任务会影响其进入低功耗模式的能力。这会极大地影响电池寿命。
      猜你喜欢
      • 2015-11-28
      • 2016-09-14
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      相关资源
      最近更新 更多