利用apache源码自制服务管理程序
2008-05-07 21:56
239 查看
利用apache源码自制服务管理程序
当我们开发一个后台应用时,通常没有界面,并且会把它注册成一个服务程序。但是,如果普通用户要对这个服务进行重启,关闭等操作,他必须要到控制面板-管理工具-服务那里才能进行。更重要的是,机器启动后,用户并不能明显地看到服务是否在运行等信息,所以,最好为该应用添加一个常驻托盘并能动态显示运行状况的功能(比如瑞星等杀毒程序就有这个功能)。那么,是不是我们需要为应用特意实现这个功能呢?答案是不用,因为我们有apache!
作为一个开源的web服务器,apche除了给我们提供web服务之外,还有一些小工具一起发布在源码包里,其中一个名字叫ApacheMonitor,请将这个工具的源码考出来,稍作改动就可以自制一个专用的服务管理程序,并且马上具备以下功能:
1) 托盘图标驻留
2) 托盘图标动态显示服务运行情况
3) 托盘图标右键菜单
4) 托盘图标左键菜单,用来管理具体服务
5) 服务管理配置窗口(包含服务启动,停止,日志等)
6) 和应用服务是独立的,两者互不干扰
那么,我们到底需要怎么做呢?很简单,
1) 用VC6打开ApacheMonitor工程的工作空间
2) 更改一下代码中的几处地方,主要是:我们后台应用的判断条件(比如:可执行文件的路径名中含有的关键字,这个用来判断哪些服务是我们所关心的)以及应用的互斥体名字(用来识别应用是否重复启动),见后面源码中的粗体字部分
3) 如果你对外观不满意,可以在资源文件中更改文字﹑图标等信息,让它完全满足您的要求(开源就是好^_^)
4) 编译一下,执行看看效果,这是我制作的一个样例(还没有换掉apache的大羽毛):
[align=left]/* ====================================================================[/align]
[align=left] * ApacheMonitor.c Simple program to manage and monitor Apache services.[/align]
*
……
[align=left]BOOL GetApacheServicesStatus()[/align]
[align=left]{[/align]
[align=left] CHARszKey[MAX_PATH];[/align]
CHARachKey[MAX_PATH];
……
[align=left] dwBufLen = MAX_PATH;[/align]
[align=left] rv = RegQueryValueEx(hSubKey, "ImagePath", NULL,[/align]
[align=left] &dwKeyType, szImagePath, &dwBufLen);[/align]
[align=left] [/align]
[align=left] if (rv == ERROR_SUCCESS[/align]
[align=left] && (dwKeyType == REG_SZ[/align]
[align=left] || dwKeyType == REG_EXPAND_SZ)[/align]
[align=left] && dwBufLen)[/align]
[align=left] {[/align]
[align=left] lstrcpy(szBuf, szImagePath);[/align]
[align=left] CharLower(szBuf);[/align]
[align=left] /* the service name could be httpd*.exe or Apache*.exe */[/align]
[align=left] /*if (((strstr(szBuf, "//apache") != NULL)[/align]
[align=left] || (strstr(szBuf, "//httpd") != NULL))[/align]
[align=left] && strstr(szBuf, ".exe")[/align]
[align=left] && (strstr(szBuf, "--ntservice") != NULL[/align]
[align=left] || strstr(szBuf, "-k ") != NULL))*/[/align]
[align=left] if (strstr(szBuf, "//inms") != NULL)[/align]
[align=left] {[/align]
[align=left] g_stServices[stPos].szServiceName = strdup(achKey);[/align]
……
[align=left]intWINAPIWinMain(HINSTANCEhInstance, HINSTANCEhPrevInstance,[/align]
[align=left] LPSTRlpCmdLine, intnCmdShow)[/align]
[align=left]{[/align]
[align=left] CHARszTmp[MAX_LOADSTRING];[/align]
[align=left] CHARszCmp[MAX_COMPUTERNAME_LENGTH+4];[/align]
[align=left] MSG msg;[/align]
[align=left] /* single instance mutex */[/align]
[align=left] HANDLEhMutex;[/align]
[align=left] ……[/align]
[align=left] [/align]
[align=left] g_hBmpStop = LoadImage(hInstance, MAKEINTRESOURCE(IDB_BMPSTOP),[/align]
[align=left] IMAGE_BITMAP, XBITMAP, YBITMAP,[/align]
[align=left] LR_DEFAULTCOLOR);[/align]
[align=left] [/align]
[align=left] hMutex = CreateMutex(NULL, FALSE, "IGOVIEWSRVMON_MUTEX");[/align]
if ((hMutex == NULL) || (GetLastError() == ERROR_ALREADY_EXISTS))
……
当我们开发一个后台应用时,通常没有界面,并且会把它注册成一个服务程序。但是,如果普通用户要对这个服务进行重启,关闭等操作,他必须要到控制面板-管理工具-服务那里才能进行。更重要的是,机器启动后,用户并不能明显地看到服务是否在运行等信息,所以,最好为该应用添加一个常驻托盘并能动态显示运行状况的功能(比如瑞星等杀毒程序就有这个功能)。那么,是不是我们需要为应用特意实现这个功能呢?答案是不用,因为我们有apache!
作为一个开源的web服务器,apche除了给我们提供web服务之外,还有一些小工具一起发布在源码包里,其中一个名字叫ApacheMonitor,请将这个工具的源码考出来,稍作改动就可以自制一个专用的服务管理程序,并且马上具备以下功能:
1) 托盘图标驻留
2) 托盘图标动态显示服务运行情况
3) 托盘图标右键菜单
4) 托盘图标左键菜单,用来管理具体服务
5) 服务管理配置窗口(包含服务启动,停止,日志等)
6) 和应用服务是独立的,两者互不干扰
那么,我们到底需要怎么做呢?很简单,
1) 用VC6打开ApacheMonitor工程的工作空间
2) 更改一下代码中的几处地方,主要是:我们后台应用的判断条件(比如:可执行文件的路径名中含有的关键字,这个用来判断哪些服务是我们所关心的)以及应用的互斥体名字(用来识别应用是否重复启动),见后面源码中的粗体字部分
3) 如果你对外观不满意,可以在资源文件中更改文字﹑图标等信息,让它完全满足您的要求(开源就是好^_^)
4) 编译一下,执行看看效果,这是我制作的一个样例(还没有换掉apache的大羽毛):
[align=left]/* ====================================================================[/align]
[align=left] * ApacheMonitor.c Simple program to manage and monitor Apache services.[/align]
*
……
[align=left]BOOL GetApacheServicesStatus()[/align]
[align=left]{[/align]
[align=left] CHARszKey[MAX_PATH];[/align]
CHARachKey[MAX_PATH];
……
[align=left] dwBufLen = MAX_PATH;[/align]
[align=left] rv = RegQueryValueEx(hSubKey, "ImagePath", NULL,[/align]
[align=left] &dwKeyType, szImagePath, &dwBufLen);[/align]
[align=left] [/align]
[align=left] if (rv == ERROR_SUCCESS[/align]
[align=left] && (dwKeyType == REG_SZ[/align]
[align=left] || dwKeyType == REG_EXPAND_SZ)[/align]
[align=left] && dwBufLen)[/align]
[align=left] {[/align]
[align=left] lstrcpy(szBuf, szImagePath);[/align]
[align=left] CharLower(szBuf);[/align]
[align=left] /* the service name could be httpd*.exe or Apache*.exe */[/align]
[align=left] /*if (((strstr(szBuf, "//apache") != NULL)[/align]
[align=left] || (strstr(szBuf, "//httpd") != NULL))[/align]
[align=left] && strstr(szBuf, ".exe")[/align]
[align=left] && (strstr(szBuf, "--ntservice") != NULL[/align]
[align=left] || strstr(szBuf, "-k ") != NULL))*/[/align]
[align=left] if (strstr(szBuf, "//inms") != NULL)[/align]
[align=left] {[/align]
[align=left] g_stServices[stPos].szServiceName = strdup(achKey);[/align]
……
[align=left]intWINAPIWinMain(HINSTANCEhInstance, HINSTANCEhPrevInstance,[/align]
[align=left] LPSTRlpCmdLine, intnCmdShow)[/align]
[align=left]{[/align]
[align=left] CHARszTmp[MAX_LOADSTRING];[/align]
[align=left] CHARszCmp[MAX_COMPUTERNAME_LENGTH+4];[/align]
[align=left] MSG msg;[/align]
[align=left] /* single instance mutex */[/align]
[align=left] HANDLEhMutex;[/align]
[align=left] ……[/align]
[align=left] [/align]
[align=left] g_hBmpStop = LoadImage(hInstance, MAKEINTRESOURCE(IDB_BMPSTOP),[/align]
[align=left] IMAGE_BITMAP, XBITMAP, YBITMAP,[/align]
[align=left] LR_DEFAULTCOLOR);[/align]
[align=left] [/align]
[align=left] hMutex = CreateMutex(NULL, FALSE, "IGOVIEWSRVMON_MUTEX");[/align]
if ((hMutex == NULL) || (GetLastError() == ERROR_ALREADY_EXISTS))
……
相关文章推荐
- 利用 apache源码 自制服务管理程序
- 【原创】在Windows 环境下利用SVN和Apache以及Ankh配置源代码管理服务
- WCF服务以控制台程序为宿主时的跨域访问问题(附源码) (转载)
- 小巧的服务程序源码(转)
- [SCM]源码管理 - SVN + Apache
- apache基本配置管理一:apache服务介绍,以及简单搭建
- 提前发布4/25上海俱乐部活动演讲“集中化WCF服务配置管理”示例程序
- 详解CentOS配置和管理web服务-Apache 推荐
- tartServiceCtrlDispatcher 服务控制管理器(service) 服务控制管理程序接口
- 利用Apache Isis快速原型化-宠物诊所的宠物管理
- Linux源码包和RPM包的的区别以及RPM包服务管理方式与源码包服务管理方式
- 源码与tarball套件管理程序笔记摘录
- 第十三篇 一个安装、管理windows服务的桌面程序
- linux 源码安装apache2.4并添加服务
- 源码-Oracle数据库管理-第十二章-使用PL/SQL创建Oracle程序-Part 3(PL/SQL语言概览)
- ubuntu14.04中安装chkconfig服务管理程序的方法
- 如何去管理正在运行的程序和服务
- 巧妙地利用进程分离来设置程序开机自动启动!(附源码)
- linux下利用yum、编译安装配置apache服务
- Web服务基础一之Apache源码和YUM安装 推荐