【发布时间】:2013-02-01 08:52:02
【问题描述】:
我制作了一个 GUI 应用程序,它必须在我的 DELL 服务器上运行才能在 24 小时内发送查询。
如果应用程序被随机用户或其他任何原因停止,我创建了一个服务程序来检测它何时停止运行并再次执行。
问题是,在服务中,FindWindow() 不能正常工作(总是返回 nullptr),因为微软在 XP 之后改变了它的操作系统服务策略。并且我的服务程序无法找到该程序是否在进程列表中。
我在网上找到了一些解决方案,就是“允许服务与服务面板上的桌面交互”,但由于是很久以前的,所以不太适合当前的操作系统版本。
我应该改用 IPC 吗?还是有其他办法解决?
我相信一定有办法做到这一点,因为使用 CreateProcessAsUser() 也可以从服务执行进程。
我们将不胜感激任何建议。
提前致谢。
【问题讨论】:
-
你不能使用 EnumProcesses (msdn.microsoft.com/en-us/library/windows/desktop/…) 吗?
-
为什么不完全从服务中运行它并取消 GUI 和任何看门狗?
-
另一种选择是让 GUI 应用程序在开始运行时在全局命名空间中创建一个命名互斥锁。如果应用程序因任何原因关闭,互斥锁将消失,即使应用程序没有明确关闭它。然后,该服务可以定期检查该互斥体是否存在。
-
@RemyLebeau 我现在将尝试该选项。我很感激。
标签: winapi service findwindow