设为首页 收藏本站
查看: 509|回复: 0

[经验分享] 利用apache源码自制服务管理程序

[复制链接]

尚未签到

发表于 2017-1-6 10:24:11 | 显示全部楼层 |阅读模式
利用apache源码自制服务管理程序
当我们开发一个后台应用时,通常没有界面,并且会把它注册成一个服务程序。但是,如果普通用户要对这个服务进行重启,关闭等操作,他必须要到控制面板-管理工具-服务那里才能进行。更重要的是,机器启动后,用户并不能明显地看到服务是否在运行等信息,所以,最好为该应用添加一个常驻托盘并能动态显示运行状况的功能(比如瑞星等杀毒程序就有这个功能)。那么,是不是我们需要为应用特意实现这个功能呢?答案是不用,因为我们有apache

作为一个开源的web服务器,apche除了给我们提供web服务之外,还有一些小工具一起发布在源码包里,其中一个名字叫ApacheMonitor,请将这个工具的源码考出来,稍作改动就可以自制一个专用的服务管理程序,并且马上具备以下功能:
1) 托盘图标驻留
2) 托盘图标动态显示服务运行情况
3) 托盘图标右键菜单
4) 托盘图标左键菜单,用来管理具体服务
5) 服务管理配置窗口(包含服务启动,停止,日志等)
6) 和应用服务是独立的,两者互不干扰

那么,我们到底需要怎么做呢?很简单,
1) VC6打开ApacheMonitor工程的工作空间
2) 更改一下代码中的几处地方,主要是:我们后台应用的判断条件(比如:可执行文件的路径名中含有的关键字,这个用来判断哪些服务是我们所关心的)以及应用的互斥体名字(用来识别应用是否重复启动),见后面源码中的粗体字部分
3) 如果你对外观不满意,可以在资源文件中更改文字图标等信息,让它完全满足您的要求(开源就是好^_^
4) 编译一下,执行看看效果,这是我制作的一个样例(还没有换掉apache的大羽毛):
DSC0000.jpg
<shapetype id="_x0000_t75" path=" m@4@5 l@4@11@9@11@9@5 xe" stroked="f" filled="f" o:spt="75" o:preferrelative="t" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0 "></f><f eqn="sum @0 1 0 "></f><f eqn="sum 0 0 @1 "></f><f eqn="prod @2 1 2 "></f><f eqn="prod @3 21600 pixelWidth "></f><f eqn="prod @3 21600 pixelHeight "></f><f eqn="sum @0 0 1 "></f><f eqn="prod @6 1 2 "></f><f eqn="prod @7 21600 pixelWidth "></f><f eqn="sum @8 21600 0 "></f><f eqn="prod @7 21600 pixelHeight "></f><f eqn="sum @10 21600 0 "></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 398.25pt; HEIGHT: 248.25pt" coordsize="21600,21600" type="#_x0000_t75"><imagedata src="./%E5%88%A9%E7%94%A8apache%E6%BA%90%E7%A0%81%E8%87%AA%E5%88%B6%E6%9C%8D%E5%8A%A1%E7%AE%A1%E7%90%86%E7%A8%8B%E5%BA%8F.files/image001.png" o:title=""></imagedata></shape>
/* ====================================================================
* ApacheMonitor.c Simple program to manage and monitor Apache services.
*
……
BOOL GetApacheServicesStatus()
{
CHARszKey[MAX_PATH];
CHARachKey[MAX_PATH];
……
dwBufLen = MAX_PATH;
rv = RegQueryValueEx(hSubKey, "ImagePath", NULL,
&dwKeyType, szImagePath, &dwBufLen);

if (rv == ERROR_SUCCESS
&& (dwKeyType == REG_SZ
|| dwKeyType == REG_EXPAND_SZ)
&& dwBufLen)
{
lstrcpy(szBuf, szImagePath);
CharLower(szBuf);
/* the service name could be httpd*.exe or Apache*.exe */
/*if (((strstr(szBuf, "//apache") != NULL)
|| (strstr(szBuf, "//httpd") != NULL))
&& strstr(szBuf, ".exe")
&& (strstr(szBuf, "--ntservice") != NULL
|| strstr(szBuf, "-k ") != NULL))*/
if (strstr(szBuf, "//inms") != NULL)
{
g_stServices[stPos].szServiceName = strdup(achKey);
……

intWINAPIWinMain(HINSTANCEhInstance, HINSTANCEhPrevInstance,
LPSTRlpCmdLine, intnCmdShow)
{
CHARszTmp[MAX_LOADSTRING];
CHARszCmp[MAX_COMPUTERNAME_LENGTH+4];
MSG msg;
/* single instance mutex */
HANDLEhMutex;
……

g_hBmpStop = LoadImage(hInstance, MAKEINTRESOURCE(IDB_BMPSTOP),
IMAGE_BITMAP, XBITMAP, YBITMAP,
LR_DEFAULTCOLOR);

hMutex = CreateMutex(NULL, FALSE, "IGOVIEWSRVMON_MUTEX");
if ((hMutex == NULL) || (GetLastError() == ERROR_ALREADY_EXISTS))
……

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324595-1-1.html 上篇帖子: Apache ActiveMQ or Spring 使用方法 下篇帖子: Apache与Tomcat集群配置(2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表