资源简介
本文共涉及3个工程:beep、install、uninstall。
1) beep工程用于新服务的实现,工程中包含beep.cpp。编译并生成beep.exe,将其拷贝至c:\目录下,供安装程序调用。当安装完毕后,SCM也将调用beep.exe来执行该服务。
2) install工程用于新服务的安装,工程中包含install.cpp。编译并生成install.exe,将其拷贝至:c:\目录中,然后在Windows NT中单击“开始”,再单击“运行”,使用“运行”命令执行带3个参数的installl.exe程序。输入以下命令行进行安装:c:\install.exe BeepService "Beeper" c:\Beep.exe 。其中BeepService是供SCM内部使用的服务名,Beeper是显示在控制面板的服务程序中的名称,"c:\Beep.exe"是服务所在的可执行文件的路径。安装完毕后,你可以在控制面板的服务程序中看到新增的服务Beeper,点击右键选择“属性”,你就可以设置服务的启动类型、服务的状态和启动参数。
3) uninstall工程用于新服务的卸载,工程中包含uninstall.cpp。编译并生成uninstall.exe,将其拷贝至:c:\目录中,然后在Windows NT中单击“开始”,再单击“运行”,使用“运行”命令执行带1个参数的uninstall.exe程序。输入以下命令行进行卸载:c:\uninstall.exe BeepService。其中BeepService就是在安装服务是生成的供SCM内部使用的服务名。
代码片段和文件信息
#include
#include
#include
#include
//#include “yewu.cpp“
//Download by http://www.codefans.net
#define DEFAULT_BEEP_DELAY 3000 // 定义蜂鸣的间隔时间值
char *SERVICE_NAME = “BeepService“; // 定义服务的名称
HANDLE terminateEvent = NULL; // 定义用于控制ServiceMain执行的事件句柄
SERVICE_STATUS_HANDLE serviceStatusHandle; // 定义与SCM通讯的服务状态句柄
int beepDelay = DEFAULT_BEEP_DELAY; // 定义蜂鸣的间隔时间
BOOL pauseService = FALSE; // 定义服务暂停的标志
BOOL runningService = FALSE; // 定义服务运行的标志
HANDLE threadHandle = 0; // 定义实现服务功能的线程句柄
char lpszMac[128];
VOID SendStatusToSCM (DWORD dwCurrentStateDWORD dwWin32ExitCode
DWORD dwServiceSpecificExitCodeDWORD dwCheckPointDWORD dwWaitHint)
{
SERVICE_STATUS serviceStatus;
serviceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; //设置服务运行在其自身的进程中
serviceStatus.dwCurrentState = dwCurrentState; //设置服务的当前状态
// 如果服务正在启动,则不接收和处理控制通知事件,否则接收所有的控制通知事件
if (dwCurrentState == SERVICE_START_PENDING)
serviceStatus.dwControlsAccepted = 0;
else
serviceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_PAUSE_CONTINUE |SERVICE_ACCEPT_SHUTDOWN;
/* 如果服务具有特定的出错代码,则设置serviceStatus 的dwWin32ExitCode属性为
ERROR_SERVICE_SPECIFIC_ERROR,并设置serviceStatus的dwServiceSpecificExitCode属性
为特定出错代码,以显示特定的错误信息*/
if (dwServiceSpecificExitCode == 0)
{
serviceStatus.dwWin32ExitCode = dwWin32ExitCode;
serviceStatus.dwServiceSpecificExitCode =0;
}
else
{
serviceStatus.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR;
serviceStatus.dwServiceSpecificExitCode =dwServiceSpecificExitCode; //设置服务的特定出错代码
}
serviceStatus.dwCheckPoint = dwCheckPoint; //设置服务在启动、关闭和运行操作中反映操作进度的值
serviceStatus.dwWaitHint = dwWaitHint; //设置服务在执行启动、关闭和运行操作时将持续的时间值
SetServiceStatus (serviceStatusHandle &serviceStatus); //更新SCM中服务的状态信息
}
DWORD ServiceThread(LPDWORD param)
{ //使用Sleep函数将while控制流程挂起,然后在指定的毫秒数后自动唤醒
while (1)
{
//GetMacByCmd(lpszMac);
Beep(200200); //进行蜂鸣
Sleep(beepDelay); //将该线程挂起beepDelay中指定的毫秒数
}
return 0;
}
VOID Handler (DWORD controlCode)
{
switch(controlCode)
{ // 处理停止服务事件
case SERVICE_CONTROL_STOP:
//通知SCM服务即将停止
SendStatusToSCM(SERVICE_STOP_PENDINGNO_ERROR 0 1 5000);
runningService=FALSE; //设置服务运行的标志
SetEvent(terminateEvent); //设置终止事件句柄为活动状态,从而使ServiceMain函数得以继续执行
return;
// 处理暂停服务事件
case SERVICE_CONTROL_PAUSE:
if (runningService && !pauseService)
{
// 通知SCM服务即将暂停
SendStatusToSCM( SERVICE_PAUSE_PENDINGNO_ERROR 0 1 1000);
pauseService = TRUE; //设置服务暂停的标志
SuspendThread(threadHandle); //挂起新服务的线程
SendStatusToSCM(SERVICE_PAUSED NO_ERROR 0 0 0); //通知SCM服务暂停
}
break;
// 处理继续服务事件
case SERVICE_CONTROL_CONTINUE:
if (runningService && pauseService)
{
// 通知SCM服务即将继续
SendStatusToSCM( SERVICE_CONTINUE_PENDINGNO_ERROR 0 1 1000);
pauseService=FALSE;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-12-31 08:17 Service\
目录 0 2012-12-31 08:17 Service\beep\
目录 0 2012-12-31 08:17 Service\beep\Debug\
文件 155737 2012-11-14 08:17 Service\beep\Debug\beep.exe
文件 177124 2012-11-14 08:17 Service\beep\Debug\beep.ilk
文件 17559 2012-11-14 08:17 Service\beep\Debug\beep.obj
文件 3627624 2012-11-13 07:49 Service\beep\Debug\beep.pch
文件 566272 2012-11-13 07:49 Service\beep\Debug\beep.pdb
文件 369664 2012-11-14 08:17 Service\beep\Debug\vc60.idb
文件 274432 2012-11-13 07:49 Service\beep\Debug\vc60.pdb
文件 5831 2012-11-13 07:49 Service\beep\beep.cpp
文件 4260 2000-11-07 11:14 Service\beep\beep.dsp
文件 531 2000-11-07 11:07 Service\beep\beep.dsw
文件 50176 2012-11-14 08:17 Service\beep\beep.ncb
文件 48640 2012-11-14 08:17 Service\beep\beep.opt
文件 734 2012-11-14 08:17 Service\beep\beep.plg
文件 6533 2012-11-12 09:51 Service\beep\yewu.cpp
目录 0 2012-12-31 08:17 Service\install\
目录 0 2012-12-31 08:17 Service\install\Debug\
文件 151647 2012-11-14 08:18 Service\install\Debug\install.exe
文件 162896 2012-11-14 08:18 Service\install\Debug\install.ilk
文件 11762 2012-11-14 08:18 Service\install\Debug\install.obj
文件 3611192 2012-11-11 17:00 Service\install\Debug\install.pch
文件 402432 2012-11-13 07:50 Service\install\Debug\install.pdb
文件 148480 2012-11-14 08:18 Service\install\Debug\vc60.idb
文件 86016 2012-11-12 11:42 Service\install\Debug\vc60.pdb
文件 1067 2012-11-12 11:41 Service\install\install.cpp
文件 4296 2000-11-07 11:15 Service\install\install.dsp
文件 537 2000-11-07 11:14 Service\install\install.dsw
文件 41984 2012-11-14 08:19 Service\install\install.ncb
文件 48640 2012-11-14 08:19 Service\install\install.opt
............此处省略17个文件信息
- 上一篇:vc++ 在opc开发的应用
- 下一篇:基于OPNET的TCP协议研究与仿真论文
相关资源
- 基于OPNET的TCP协议研究与仿真论文
- vc++ 在opc开发的应用
- 提高C++性能的编程技术.pdf
- Visual+C++开发基于SNMP网络管理软件配套
- 动物识别系统 VC++ 逆向搜索 正向搜索
- c++课程设计旅行线路搜索及模拟
- 基于VS2010 CLR平台C++的简易计算器。不
- 基于TCP协议的C++聊天软件源代码
- C++编写的Socket通信程序源代码
- C++网络五子棋
- 开源C++应用服务器:CWSS 0.8.0
- 超级玛丽 闯关游戏 c++
- 手把手教你用vc6 c++ 做俄罗斯方块小游
- c++ primer 4th answer完整版
- MFC写的抓包工具
- C++ 水果分类识别matlab代码,有详细的
- 简易宠物店管理系统
- 基于VC++ MFC通讯录
- VC++串口通信源代码VC6.0
- C++编定的LR0分析表
- 图像综合处理C++程序
- SDL Game Development.pdf
- Qt/C++ 无边框随便拖动调整大小
- 程序设计实习课程整理.pdf
- OpenCV打开图片和网络摄像头(C++)
- 用C++、Qt实现的记事本,模拟Windows自
- Visual C++ MFC编程源代码
- 网络调试助手---开发环境:VC++6.0 基于
- C++进阶课程讲义_v1.0.4.pdf
- C++图像处理入门教程
评论
共有 条评论