Windows服务与GUI监视器?

我有一个作为Windows GUI项目编写的C ++ Win32应用程序,现在我试图弄清楚将它变成一个服务/ GUI混合。 我知道一个Windows服务不能/不应该有一个用户界面。 但请允许我解释我到目前为止以及我所拍摄的内容。

我现在有什么是一个Windows应用程序。 运行时,它会在系统托盘中放置一个图标,您可以双击打开该图标。 此应用程序的目的是处理夜间计划中指定目录中的文件。 GUI包含以下内容:

  • 一个button来手动启动一个不定期的扫描/处理。
  • 一个button来打开一个对话框来修改设置。
  • 列表框用于显示处理线程发送的状态消息。
  • 用于显示图像数据的自定义绘制窗口(文件处理包括图像的创build和保存)。
  • 状态栏 – 当进程没有运行时,它显示下一个计划扫描的倒计时。 在扫描期间,它还提供一些状态反馈,包括进度条。

我正在拍摄的是一个在启动时运行的服务,不需要用户login。 这将包含预定的文件处理。 但是,当用户login时,我仍然想要加载托盘图标,并允许他们打开一个GUI,如上所述,以监视服务的当前状态,更改设置,手动启动扫描以及监视进度的扫描。

我确定我已经看到了这样的应用程序 – 即使在我没有login的情况下也可以作为服务使用,但是一旦我login,仍然可以给我一个用户界面。

我在想,不是有一个multithreading应用程序从处理线程向GUI线程发送消息,我需要两个应用程序 – 一个服务来执行处理和一个GUI应用程序,以提供来自服务的可视反馈发送消息到服务(例如,手动开始扫描)。 但是我对Windows服务不熟悉,不知道这是如何完成的。

也有可能我完全脱离了基地,服务不是我一直在寻找的。

任何帮助/想法/build议将不胜感激! 谢谢。

你不能做这个服务。

您需要将Windows服务作为普通的服务应用程序。 这将在系统启动时启动,并在整个系统运行时运行。

然后,您可以创建一个完全独立的GUI应用程序,与应用程序“交谈”。 这可以设置为在用户登录时在用户的帐户中运行。

为了让他们互相“交谈”,你需要使用某种形式的IPC 。 由于这些系统运行在同一个系统上(但通常是在不同的账户中),所以命名管道或套接字都能很好地工作。

有一个简单的方法来做到这一点。

您不能让服务访问任何用户的会话(会话1,2,3 ..),因为服务是孤立的,只能访问会话0。 这是从2011年的变化。

您应该使用https://msdn.microsoft.com/en-us/library/windows/desktop/ms682429(v=vs.85).aspx登录的每个用户编写一个由您的服务启动的win32程序

该服务可以继续执行任何不是用户特定的任务。