基于MFC对话框的NT服务程序框架

基于MFC对话框的NT服务程序框架
作者: 周星星

下载本文示例代码

感谢[asp12]和[leoyin]的大力帮助,本附件中的程序只是一个没有任何功能的框架程序,程序本身是一个MFC对话框,也是一个NT服务,可以在进入windows之后,用户登陆之前就开始运行。

服务的名称、显示名称、依赖服务 可以在资源中的String Table中修改,分别对应于IDS_SZSERVICENAME、IDS_SZSERVICEDISPLAYNAME、 IDS_SZDEPENDENCIES;需要注意的是String Table中不可以存放空字符串,所以在没有依赖服务的情况下,我在IDS_SZDEPENDENCIES中放了一个空格;

注册服务和卸载服务只需要在运行时加上命令行参数 -install 和 -remove;为了便于调试,附加了一个参数 -debug,可以不经由NT服务管理器而启动。有关于NT服务的代码皆来自于MSDN。
对于非MFC的对话框程序而言,可以简化很多代码;MFC对话框比non-MFC对话框多处理了一个WM_ENDSESSION消息,否则用户在注销并重新登陆之后,程序将失去响应。这是本程序的重点所在。

在程序开始处使用了SetCurrentDirectory将当前目录设置为了模块所在目录,否则当前目录就是NT服务管理器所在目录,所以调试的时候需要注意,当前目录不是工程所在目录了,而是工程目录下Debug目录,这非常方便。
本程序还增加了系统托盘功能,对于系统托盘,本程序处理了两个特殊情况,一个是系统托盘弹出的菜单在失去焦点时会自动消失,另一个是在Explorer.exe崩溃重建时系统托盘也自动重建。

使用-debug参数运行时跟普通程序一样,省略;运行和停止这个服务可以在NT服务管理器中进行,也可以使用控制台命令net shart/stop,如果你愿意增加一些代码,也可以直接启动。停止这个服务还可以使用系统托盘中的Exit菜单。

NT服务常用于无人职守运行,因此也应该避免用户不小心退出程序,所以本人将最小化按钮和关闭按钮的功能变成了隐藏,恢复显示和退出程序可以使用系统托盘中的菜单。

对于不熟悉NT服务的用户需要注意,因为NT服务会在用户登陆之前就开始运行,因此比如连接远程共享就应该如下处理:
1.将网络通讯的服务名称加到IDS_SZDEPENDENCIES中,这样确保网络通讯服务在次服务之前启动;
2.因为用户还没有登陆,所以没有默认的用户名,所以应该提供用户名和密码去访问远程共享。 当然这些都不是本程序应该说明的事。

很多文章说到要在NT服务程序中显示界面,必须要OpenWindowStation(_T("winsta0")...),但本人没有这样做,这是一个疑问。

最后,为了避免法律纠纷,特此声明:本代码是在业余时间编写,虽曾用于部分商业项目,但所有权不属于任何公司,而本人也不需要任何所有权。

测试平台:win2k pro,VC++6.0 + SP5

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于MFC对话框NT服务程序框架是在Windows系统下开发服务程序的一种基于MFC(Microsoft Foundation Class)对话框框架架构。NT服务程序是一种在Windows系统下后台运行的程序,可以实现自动启动、无需用户交互、后台运行等功能。 基于MFC对话框NT服务程序框架有以下特点: 1. 采用MFC对话框,可以方便地设计程序界面和交互方式,方便用户操作。 2. 可以通过类视图和资源视图快速查找和管理程序代码和资源。 3. 使用NT服务程序框架可以避免手动创建服务,可以减少代码的编写量和提高程序的可靠性和稳定性。 4. 使用NT服务程序框架可以方便地实现服务的启动、停止、暂停和重新启动等操作。 基于MFC对话框NT服务程序框架的具体实现步骤如下: 1. 创建一个MFC对话框程序,设置项目类型为“服务程序”; 2. 在对话框程序中加入Windows服务管理相关代码,用于服务的开启、关闭、暂停和恢复等操作; 3. 实现服务程序的逻辑功能,例如对文件进行监控、实时数据同步等; 4. 编译、安装和启动服务,测试服务的功能和稳定性; 5. 在服务启动后,可以通过MFC对话框程序的用户界面和交互方式与服务进行交互。 综上所述,基于MFC对话框NT服务程序框架使得开发Windows服务程序变得更加简单和高效,可以提高程序的可靠性和稳定性,并在服务启动后方便进行交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值