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

串行通信的基本原理及用MFC实现串口通信编程        在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。  实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机杂志上发表。但总的感觉说来不太全面,特别是介绍32位下编程的更少,且很不详细。笔者在实际工作中积累了较多经验,结合 阅读详情
基于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

基于MFC对话框的NT服务框架:开发带GUI的后台服务程序 Windows NT服务是构建稳定后台进程的核心技术,它允许程序在系统后台无界面运行,实现7x24小时持续工作。其原理是通过服务控制管理器(SCM)进行生命周期管理,确保进程的可靠启动与停止。这种架构在监控系统、数据同步等场景中具有重要价值,能够满足无人值守运行的需求。然而,传统NT服务开发往往面临配置管理不便的挑战,通常需要额外开发独立的配置工具。针对这一问题,结合MFC(Microsoft Foundation Classes)框架的对话框界面开发能力,可以构建一种创新的解决方案——基于MFC对话框的N 阅读详情

相关推荐

基于MFC对话框的NT服务框架:实现后台服务与UI界面的双模融合

Windows服务(NT服务)是构建稳定后台应用的核心技术,它通过系统服务控制管理器(SCM)实现生命周期管理,确保程序随系统启动并持续运行。其原理在于将程序注册为系统服务,以无界面或最小化界面的方式在后台执行任务,具备高可靠性和自管理能力。这一技术价值在于为工业控制、数据采集、文件同步等场景提供了坚实的后台运行基础,满足了7x24小时不间断作业的需求。然而,传统服务缺乏实时交互界面,使得监控、配置和手动干预变得困难。为此,将MFC对话框框架与NT服务结合,形成“双模”架构,成为解决这一痛点的有效方案。该架

weixin_31421613的博客 260

【转】MFC与.NET的区别

1. MFC是在API的基础上封装出来的一个类库,给C++程序员在Windows上快速开发用的。 .Net类库是在Windows非托管API的基础上封装出来的一个托管类库,给程序员在各种Windows平台上跨平台开发用的。 2. 只是两个不同平台的编程,一个是NET平台,一个是WIN32。 3. .NET的基类是基于.net运行时库的,通过运行时库对操作系统和硬件进行操作,而MFC是直接对操作系统和硬件进行操作的。 .NET有个问题就是你编写的程序只能在装有.net framew...

sinolover的专栏 3005

NTService-mfcUI

根据MSDN上 Windows NT 服务程序样例优化后,轻松实现带MFC对话框的系统服务程序框架。

MFC和设计模式

  MFC不是唯一一个使用了设计模式的程序库,也不可能是唯一的一个。可以肯定的说,所有好的框架必然是充满了好的设计模式。本文的目的在于提醒大家学习框架时,运用设计模式的理论和思想去理解其中众多的类之间的联系,从整体的角度去学习部分,显然比从部分去理解整体有更好的效果。本文的后面会给出MFC中的一些设计模式。   但是,不得不悲哀的看到,MFC中的核心类CWnd(不知道的先拖下去打)违反了框架设计

ecai的专栏 3806

Windows下用C++编写NT Service程序

本压缩包包含以下4个文件: CX_NTSercvice.h文件 CX_NTSercvice头文件 CX_NTSercvice.cpp文件 CX_NTSercvice源文件 test.cpp 示例程序 CX_NTSercvice.CHM 帮助文档.

NT Service服务程序框架C++源代码

NT Service服务程序框架C++源代码,编写服务程序很方便

MFC 访问网址

.h #ifndef HTTPCLIENT_H #define HTTPCLIENT_H #include #include using namespace std; #define IE_AGENT _T("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)")

5907

MFC 网络编程服务器端程序

使用MFC封装的CAsyncSocket类编写的网络服务器端程序,有简洁的界面

MFC 获取系统类型及版本

CString CWizardSheet::GetSystemType(void) { OSVERSIONINFO osvi; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); CString csver; switch (osvi.dwPlatformId

hxmcnu的专栏 2541

NT Service服务程序框架源代码

Windows NT/2000/XP服务程序框架(2000.9):为了方便程序员编写NT后台服务程序,我用Visual C++写了这个服务程序框架,可以直接扩展成真正的服务程序。

Codex App 远程 SSH 连接 autodl 配置全攻略

SSH 远程连接是开发中常用的技术,通过加密通道实现本地与远程服务器的安全通信。其原理基于非对称加密和密钥对认证,确保数据传输安全。在 AI 开发场景中,远程连接能充分利用云端 GPU 算力,同时保留本地编辑器的流畅体验。autodl 作为主流算力云平台,支持通过 SSH 接入实例,但 Codex App 等工具需额外配置。本文详细讲解如何获取 autodl 的 SSH 接入信息、配置密钥登录、填写 Codex App 远程连接参数,并解决连接拒绝、权限报错等常见问题,帮助开发者高效搭建远程开发环境。

weixin_28312391的博客 257

将基于MFC的对话框应用程序修改为服务程序

Windows(NT/2000)下有很多服务程序(它们在系统登录前运行),它们一般都没有界面,我们可以在服务管理器(运行services.msc)中启动和关闭它们。下面我试着修改一个有界面的MFC对话框程序,使它成为一个服务程序。网上提到了一种方法就是,从建立一个COM服务程序入手,然后将一个MFC项目改造成服务程序,最后让这一程序在启动时可以显示图形界面。这种方法的优点就是,程序向导已经帮我们写

delphiwcdj的专栏 7500

别再死记硬背参数了!用ADS手把手教你仿真一个4GHz镜像抑制混频器(附完整工程文件)

本文详细解析了4GHz镜像抑制混频器的ADS仿真全流程,从理论到实践,涵盖混频器设计基础、ADS工程搭建、二极管选型、非线性仿真及性能优化。通过实战案例,帮助工程师掌握关键参数平衡与调试技巧,提升射频电路设计效率。

weixin_42552716的博客 339

将基于MFC的对话框应用程序修改为服务程序---------

将基于MFC的对话框应用程序修改为服务程序 转载自:http://bbs.youkuaiyun.com/topics/380084096 Windows(NT/2000)下有很多服务程序(它们在系统登录前运行),它们一般都没有界面,我们可以在服务管理器(运行services.msc)中启动和关闭它们。下面我试着修改一个有界面的MFC对话框程序,使它成为一

阿冬专栏 2487

银河麒麟V10系统下VLC播放器安装全攻略(附3.0.9.2版本离线包下载)

本文详细介绍了在银河麒麟V10操作系统无网络环境下,从零开始编译安装VLC 3.0.9.2播放器的完整攻略。通过构建本地YUM仓库解决依赖问题,提供离线资源包下载,并逐步指导完成编译环境配置、软件编译与安装,帮助用户在国产麒麟系统上成功部署强大的多媒体播放能力。

a2b3c4d5e的博客 1212

对工时评估的思考:当AI颠覆了coding效率

在AI时代,“人日”作为软件工时度量衡已然失效。开发的价值核心正从“编码实现”转向“深度思考”与“精准沟通”——即如何将人类的模糊需求精确地传达给AI。当最有价值的“思想工作”变得最难量化时,传统的项目管理范式随之动摇。我们必须超越对过程的算计,开始探索衡量思想、沟通与业务价值的新标尺。

架构师刘7的博客 1017

编写有图形界面的 Windows 服务程序

下载源代码环境:Windows 2003,VC 6.0摘要:从建立一个COM服务程序入手,然后将一个MFC项目改造成服务程序,最后让这一程序在启动时可以显示图形界面。关键字:windows服务程序 COM服务程序 开机前启动 NT服务 与桌面交互一、什么是windows的服务程序?可以使用下面的几种方法看到它。 打开控制面板,然后是管理工具,里面有一个“服务”,双击后

1967

计算机网络自顶向下(第八版)第一章课后习题

电路交换网络具有以下优点:资源独占性,在建立连接时,电路交换网络为通信双方独占一条物理路径,不会受到其他用户的影响。低时延,由于建立了专用路径,数据传输时延较小,适合对时延敏感的应用,如实时语音和视频通信。数据链路层:提供节点之间可靠的数据传输,主要任务是错误检测和纠正,以及数据帧的传输和访问控制。移动蜂窝网络:如4G LTE和5G,通过移动基站提供的无线信号实现移动设备的互联网接入。网络层:负责数据包的路由和转发,主要任务是通过网络选择最佳路径,进行流量控制和拥塞控制。手机,服务器,路由器,电脑;

hiahiakk的博客 2257

win32服务 mfc 结合 编写有图形界面的 Windows 服务程序

<br /><br />编写有图形界面的 Windows 服务程序<br /><br />作者:feitian2007<br />下载源代码<br />环境:Windows 2003,VC 6.0<br />摘要:从建立一个COM服务程序入手,然后将一个MFC项目改造成服务程序,最后让这一程序在启动时可以显示图形界面。<br />关键字:windows服务程序 COM服务程序 开机前启动 NT服务 与桌面交互<br /><br />一、什么是windows的服务程序?<br />可以使用下面的几种方法看到

ermuzhi的专栏 2763

数字图像处理:直方图匹配或规定化Histogram Matching (Specification)原理及感悟

本文介绍了连续图像和数字图像直方图匹配(直方图规定化)的原理、处理过程,并提供了案例进行了讲解。可以看到,直方图均衡处理是直方图匹配的一个重要桥梁。 最后,对于直方图规定化这个翻译个人觉得很low,个人感觉叫指定直方图更好理解,但Histogram Specification怎么翻译确实不太好把握,因此还是叫Histogram Matching直方图匹配最好。

老猿Python 2880

最新Python爬虫实战(入门爬虫篇)——案例20:某股票数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释)

本次案例针对某股票行情网的静态HTML页面,实现了全市场股票数据的全自动化爬取,覆盖了从抓包分析、请求模拟、数据解析到数据存储的完整爬虫流程,非常适合入门学习者巩固基础,核心知识点和实现要点总结如下:首先是页面分析的核心逻辑,静态HTML页面的数据爬取,核心在于通过浏览器开发者工具,完成完整的抓包分析和标签结构定位。我们不需要像动态页面那样找隐藏的API接口,只需要确认数据在主文档的HTML源码中,然后通过元素选择器,精准找到每个字段对应的标签,总结出统一的标签结构规律,就能实现批量数据提取。

努力让自己发光,对的人才能迎着光而来 19万+

编写有界面的系统服务程序

摘要:从建立一个COM服务程序入手,然后将一个MFC项目改造成服务程序,最后让这一程序在启动时可以显示图形界面。  关键字:windows服务程序 COM服务程序 开机前启动 NT服务 与桌面交互  一、什么是windows的服务程序?  可以使用下面的几种方法看到它。  打开控制面板,然后是管理工具,里面有一个“服务”,双击后打开;  或者是通过输入命令的方式,打开开始菜单,点击运行,输入mmc services.msc(mmc可省略),也可打开;  我们会在打开的页面中看到一个大的列表,标题栏上包含有名

yanglingjay123的专栏 325

LVGL colorwheel组件教程一(调色板)

【代码】LVGL colorwheel组件教程一(调色板)

摸鱼专家 438
上一篇: 编写有图形界面的 Windows 服务程序
下一篇: 如何在服务(Service)程序中显示对话框
mergerly
博客等级 码龄22年 953粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值