带GUI监控的Windows服务?

Tim*_*man 4 c++ windows service user-interface winapi

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

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

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

我正在拍摄的是一种将在启动时运行而不需要用户登录的服务.这将包括计划的文件处理.但是,当用户登录时,我仍然希望加载托盘图标,并允许他们打开如上所述的GUI,以监控服务的当前状态,更改设置,手动启动扫描以及监控进度扫描.

我确信我已经看过这样的应用程序 - 即使我没有登录就可以作为服务运行,但是一旦登录我仍然可以给我一个用户界面.

我想,我需要两个应用程序 - 一个用于执行处理的服务和一个GUI应用程序来提供来自服务的视觉反馈,而不是让一个多线程应用程序从处理线程向GUI线程发送消息.向服务发送消息(例如,手动启动扫描).但我是Windows服务的新手,并不知道如何做到这一点.

我也可能完全脱离基础而且服务不是我正在寻找的.

任何帮助/想法/建议将不胜感激!谢谢.

Ree*_*sey 6

您不能将此作为服务.

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

然后,您将创建一个完全独立的GUI应用程序,该应用程序与服务"对话".这可以设置为在用户登录时在用户的帐户中运行.

为了使它们彼此"交谈",你需要使用某种形式的IPC.由于它们在同一系统上运行(但通常在不同的帐户中),因此命名管道或套接字都能很好地工作.