编写一个带管理界面(对话框)的windows后台服务程序

本文介绍如何将一个已有的前台应用程序转化为既能作为后台服务运行,又可直接启动的程序。通过添加服务模块,该程序能在两种模式下运行,同时具备配置界面。文章详细解释了开发步骤和技术要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写一个带管理界面(对话框)的windows后台服务程序  2007-03-06 13:17

分类: VC
字号:    

 这个程序是一个自身带有管理、配置界面的后台服务,当然也可以作为前台普通程序来使用,其实就是在一个写好的前台程序里添加了后台服务模块,使其既能由后台启动,也能双击运行。

这样做增加了程序的设计难度,减弱了程序的模块化,日后扩展修改可能有些麻烦。不过这也有几个明显的好处:

1、  最大程度利用了已经写好的前台程序,不用再另外开发配置工具

2、  程序代码在一个工程里,便于修改、调试,不需要同步代码

3、  后台服务中也可添加对话框,用于更加细致的了解程序的运行状态(本服务没有做这部分,但添加这块也很容易)

整个程序的架构示意图:

此图片过两天再添加

程序架构示意图

开发步骤及流程:

1、开发好前台程序

2、参考《编写有图形界面的 Windows 服务程序》(http://www.vckbase.com/document/viewdoc/?id=1738)这篇文章生成CServiceModule类,将其单独写一个文件,并加入到工程里。

3、  void CServiceModule::Start()函数中,

if (m_bService && !::StartServiceCtrlDispatcher(st))  //判断是否是后台服务方式启动

{

     m_bService = FALSE;

 }

 if (m_bService == FALSE) 

      UnServiceRun();   //前台方式启动则执行这个函数,原来是Run()。后台方式系统会自动调用ServiceMain()函数,而ServiceMain()中会调用Run();

      这样就可以在Run()中写后台服务所要执行的程序,在UnServiceRun()中写前台方式启动时要执行的代码,可以在此调用前台的那个对话框,并传入自身的指针。把全部的对底层的操作全部封装在CServiceModule类中,而对话框类则调用CServiceModule类中的方法。这样即使不安装后台服务,照样可以完成工作,并最大限度的使代码所走的路径相同,便于以后调试。

4、不要将Run()中的消息处理代码注掉,否则Run执行完后后台服务后也就要退出了。可以在Handler()里面添加消息的响应代码(前台启动时是不会执行Handler的)

MSG msg;

while (GetMessage(&msg, 0, 0, 0))

    DispatchMessage(&msg);

5、在前台管理界面上添加“安装、卸载、启动、停止后台服务”的代码

 

    这样,服务大体上就完成了,最后的程序就一个exe,从后台服务运行和双击运行执行的是同一个exe,但是两个不同进程,走的是不同的代码,这一点一定要分清楚。如果有资源两者都要访问,如文件,则要设好临界区。可以在后台服务启动时也弹出对话框(Run函数中),从而可以实现监控服务运行状态等其他功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值